家のmacbook proにdockerでphp+mysql+nginxを導入してみました。
「phpがnginx経由で動いて、mysqlもテーブル作れるよね🤔」
くらいなレベルで動くところまで確認します。
dockerをインストールする
公式ページにログインして、[Get Standard] => [Download Desktop for Mac and Windows]からインストールします!
ログインしないとダウンロードできないので注意です。
アカウントを持っていない場合は、新規に作成します。
docker-composeを使う
docker-composeコマンドを使うことによって、
dockerイメージを作成して、動かすまでが簡単にできます😀

Docker Desktop for Macなどデスクトップ用でインストールしてきたものにはdocker-composeコマンドが一緒に使えます。
下記コマンドが動くか確認しておきましょう。
docker-compose -v
今回のファイル構成
nginx/
codelike_server.conf => nginxのconfファイル
php/
Dockerfile => php-fpmビルド用
php.ini => php設定ファイル
www/
phpinfo.php => テスト用(いつものw😑)
docker-compose.yml
こんな感じのファイル構成になっています。
docker-compose.ymlを書く
docker-compose.ymlを書いて、使いたいサービスを定義していきます。
今回はこんな感じにしてみました!
version: '3'
services:
nginx:
image: nginx:latest
ports:
- 8080:80
volumes:
- ./nginx/codelike_server.conf:/etc/nginx/conf.d/default.conf
- ./www:/var/www/html
depends_on:
- php
php:
build: ./php
volumes:
- ./www:/var/www/html
depends_on:
- db
db:
image: mysql:5.7
ports:
- 13306:3306
environment:
MYSQL_ROOT_PASSWORD: password
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
ports:
- 8888:80
depends_on:
- db
docker-compose.ymlを解説してみる

ここでは例で書いてる上記のものだけ、とりあげます。
version
versionのところはdocker-composeの書き方のバージョンです。
現在は3.7が最新のようです。
services
この配下に使いたいサービスを書いて行きます。
nginxとかphpとかdbとか名前はなんでもいいみたいです。
image
ここに使いたいイメージを書きます。
buildが指定されていなくて、イメージがない場合はpullしてイメージを作ってくれます!
たぶんdocker hubにあるイメージを取ってきてくれるんでしょうね😄
ports
サービスが使うポートを指定します(HOST:CONTAINER)で指定できます。
ここの例ではnginxが8080:80になっているので、
ホストのPCからは8080を参照しにいくと、そのサービスにアクセスできるイメージですね。
コンテナポートのみ指定でもいけるようです。
どうなるんだろう…
volumes
指定された場所をマウントできます。
ここの例では ./nginx/codelike_server.conf:/etc/nginx/conf.d/default.conf としているので
ホストにある./nginx/codelike_server.confが、dockerコンテナの/etc/nginx/conf.d/default.confに配置されます。
あと、./www:/var/www/htmlとしてホストのphpinfo.phpをnginxの/var/www/htmlに配置してます!
phpのほうも/www:/var/www/htmlとしているので、
コンテナに入るとnginxコンテナとホストと同じものが見えます。
ホストや片方のコンテナで削除されると同じようにファイルが消えます。
場所が共有されるんですね。
すごいけどどうなってるんやろ…
depends_on
コンテナの依存関係を書いておきます。
起動順序に関係して、ここの例では、
・nginxはphp(fpm)が起動してから起動する
・phpとphpmyadminはdbが起動してから起動する
となります。
environment
環境変数をコンテナに渡すために書いています。
ここの例ではMYSQL_ROOT_PASSWORDでmysqlのルートパスワードを設定しています!
下記に詳しくかいていました。
build
イメージをpullしてくるのではなく、ここで指定したパスのDockerfileを見てくれて
そこからイメージを作成してくれます。
ここの例ではphpコンテナを作るときに、./php配下のDockerfileを元に作ってくれます!
github
./php/Dockerfileの中身とか、nginxのconfとかphpのconfとかはこちらを確認!
動作確認
次のコマンドでgithubからcloneして
git clone https://github.com/YasuakiHirano/codelike_web_docker.git
docker-compose up -dで起動します。
-dオプションをつけることでバックグラウンド起動してくれます。
1回目はインストールとか出ると思うけど、2回目以降はこんな感じ。。
$docker-compose up -d
Creating network "codelike_web_docker_default" with the default driver
Creating codelike_web_docker_db_1 ... done
Creating codelike_web_docker_phpmyadmin_1 ... done
Creating codelike_web_docker_php_1 ... done
Creating codelike_web_docker_nginx_1 ... done
http://localhost:8080/phpinfo.php
上記URLにアクセス!
mysqlの方はコンテナにログインします。
docker psで確認するとcodelike_web_docker_db_1という名前のコンテナが立ち上がってるので
docker exec -it codelike_web_docker_db_1 /bin/bash
でコンテナに入って、設定したpasswordでmysqlにログイン。
エラーが出たよ
作業中にphpのコンテナ作成で、onigurumaがない旨のエラー
鬼車って・・・名前インパクトすごいですね(笑)
正規表現のライブラリらしいです。
configure: error: Package requirements (oniguruma) were not met:
No package 'oniguruma' found
Dockerfileに下記を追加して、立ち上げると解決しました!
libonig-devをインストールしとく必要があるようです。ナニソレ…
apt-get install -y libonig-dev
コメント