今からお前んちこいよ

ベルリンにて細々とお勉強。

docker-compose で nginx+php7 の環境をチャチャッとつくるテンプレ

f:id:hakopako03:20170906153632j:plain

構成イメージ

f:id:hakopako03:20170906152542p:plain

[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() がでる

f:id:hakopako03:20170906145918p:plain

あとは

./html にファイルを作っていけばチャチャッと簡単にwebアプリケーショの開発をスタートできる