docker-compose で nginx+php7 の環境をチャチャッとつくるテンプレ
構成イメージ
[XXXX-MacBook-Pro] >>> [web-template] $ tree . ├── docker-compose.yaml ├── docker │ ├── Dockerfile │ └── default.conf ├── data -> *mount-point │ └── sample.txt ├── html -> *mount-point │ └── index.php └── log -> *mount-point └── nginx ├── access.log └── error.log
- ./data を /var/data にマウント
- ./html を /usr/share/nginx/html にマウント
- ./log を /var/log にマウント
準備
ディレクトリの作成
$ mkdir web-template && cd web-template $ mkdir -p data docker html log/nginx $ touch data/sample.txt log/nginx/access.log log/nginx/error.log $ echo "<?php phpinfo(); ?>" > html/index.php
Nginxの設定ファイル作成
- docker/default.conf
server { listen 80; index index.php index.html; server_name php-docker.local; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /usr/share/nginx/html; location / { root /usr/share/nginx/html; index index.html index.htm; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }
ポート80、ログは /var/log/nginx/{access.log|error.log} に出力。
拡張子が .php のものはphpとして実行するように設定。
Dockerfileの作成
- docker/Dockerfile
FROM nginx RUN rm /etc/nginx/conf.d/default.conf ADD ./default.conf /etc/nginx/conf.d/default.conf
nginxのイメージを使って、上で作った設定ファイルに置き換える。
docker-composeで構成設定
- docker-compose.yaml
app: build: "./docker" ports: - "80:80" - "443:443" volumes: - "./log:/var/log" - "./html:/usr/share/nginx/html" - "./data:/var/data" links: - php php: image: php:7-fpm volumes: - "./log:/var/log" - "./html:/usr/share/nginx/html" - "./data:/var/data"
ホストOSのディレクトリとコンテナ内のディレクトリの連携を volumes で設定。
ホスト相対パス:コンテナ絶対パス で指定。
コンテナ起動
ビルド
[XXXX-MacBook-Pro] >>> [web-template] $ docker-compose build php uses an image, skipping Building app Step 1/3 : FROM nginx ---> 6b914bbcb89e Step 2/3 : RUN rm /etc/nginx/conf.d/default.conf ---> Using cache ---> 66c640a87251 Step 3/3 : ADD ./default.conf /etc/nginx/conf.d/default.conf ---> Using cache ---> 8b48b778761d Successfully built 8b48b778761d
起動
[XXXX-MacBook-Pro] >>> [web-template] $ docker-compose up Starting webtemplate_php_1 Starting webtemplate_app_1 Attaching to webtemplate_php_1, webtemplate_app_1 php_1 | [06-Sep-2017 05:54:16] NOTICE: fpm is running, pid 1 php_1 | [06-Sep-2017 05:54:16] NOTICE: ready to handle connections
http://localhost/index.php を起動すると phpinfo() がでる
あとは
./html にファイルを作っていけばチャチャッと簡単にwebアプリケーショの開発をスタートできる