##前置き
phpとnginxが入っている環境をdocker-composeで作成しました。
慣れないことばかりで戸惑いましたが、備忘録代わりに手順を残しておこうと思います。
*docker for macをインストールしている前提で手順を進めていきます。
##フォルダ構成
フォルダの構成はこのようになってます。
phpsql
│ docker-compose.yml
├─data
│ │
│ └─www
│ index.php
│
│
│
├─nginx
│ Dockerfile
│ server.conf
│
└─php5
Dockerfile
php.ini
docker-compose.ymlですが、プロジェクトの作業ディレクトリのルートに置く方法が一般的らしいです。
ではdocker-compose.ymlの中身を見ていきましょう。
##docker-compose.yml
docker-compose.yml
version: '2'
services:
nginx:
build: ./nginx
ports:
- "9000:80"
links:
- php5
volumes:
- ./data/www:/var/www/html
- ./nginx/server.conf:/etc/nginx/nginx.conf
php5:
build: ./php5
volumes:
- ./data/www:/var/www/html
- ./php5/php.ini:/usr/local/etc/php/php.ini
smtp:
image: schickling/mailcatcher
ports:
- "1090:1080"
- "1025:1025"
```
###各種詳細
#####version: '2'
これでymlの記述を決めています。version1は廃止が決定されており、今後記述していくなら2が無難らしいです。
#####build
Dockerfileがあるディレクトリのパスを指定します。nginxのコンテナの場合、
``````php:docker-compose.yml
build: ./nginx
```
となっています。パスの./nginxはdocker-compose.ymlがある場所からの相対パスになります。
docker-compose buildをした際に、ディレクトリ直下のDockerfileを読み込んでコマンドを走らせます。
#####ports
ポートの公開内容です。
``````php:docker-compose.yml
ports:
- "9000:80"
```
上記ならホスト側が9000でコンテナ側が80となっています。ホスト側は他のサービスで使っているポートと被らないように注意しましょう。
#####links
```
links:
- php5
```
コンテナを他のコンテナにリンクさせます。上記のnginxはphp5とリンクさせていますね。
#####volumes
ホストとコンテナのフォルダを同期させている場所です。
例えば
ymlファイル上には
```
volumes:
- ./data/www:/var/www/html
```
と記載されています。
ホスト側の./data/www、コンテナ側の/var/www/htmlのどちらにもindex.phpがあるとします。
ホスト側のindex.phpが編集されるとコンテナ側のindex.phpが同期されます。
ちなみにこの同期のことをマウントといいます。
次は各コンテナのDockerfileを見ます。
##Dockerfile
``````php:nginx/Dockerfile
FROM nginx:latest
RUN apt-get update
RUN apt-get install -y vim less
MAINTAINER XXXXXX
```
``````php:nginx/dockerfile
FROM php:5-fpm
RUN apt-get update
MAINTAINER XXXXXX
```
#####From
Dockerイメージを構築する際に、元になるイメージを指定します。
#####Run
コンテナ内で実行するコマンドです。docker-compose buildした際にこのコマンドが走ります。
次はserver.confをみます。
##server.conf
``````php:server.conf
user nginx;
worker_processes auto;
pid /var/run/nginx.pid;
events{
worker_connections 2048;
multi_accept on;
use epoll;
}
http {
charset UTF-8;
server_tokens off;
include /etc/nginx/mime.types;
default_type text/plain;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
server {
listen 80 default;
server_name localhost;
root /var/www/html;
index index.php;
charset utf-8;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
try_files $uri /index.php;
}
location ~ \.php$ {
fastcgi_pass phpsql_php7_1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
```
location / {
try_files $uri /index.php;
}
try_filesには存在をチェックするファイルやディレクトリを指定します。
$uriのパスに対するファイルが存在すれば、ファイルを返します。この場合ではindex.phpを返します。
##実行
後はindex.phpに何かしら記述してdocker-compose buildをしてからdocker-compose upをすれば環境構築出来ると思います。
##参考サイト
参考にさせていただいたサイトはこちらです。
https://qiita.com/naga3/items/be1a062075db9339762d
https://qiita.com/zembutsu/items/9e9d80e05e36e882caaa
https://qiita.com/zembutsu/items/891c7ffd2c36097400b1
https://heartbeats.jp/hbblog/2012/04/nginx05.html
https://gtrt7.com/blog/nginx/docker-compose2#i-2
https://unskilled.site/%E4%BD%BF%E3%81%84%E6%96%B9%E5%9F%BA%E6%9C%AC%E7%89%88dockercompose%E3%81%A7%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%83%BB%E9%80%A3%E6%90%BA%E3%82%92%E6%A5%BD/