19
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

docker-composeでphp + nginxの環境を作りました

Last updated at Posted at 2017-10-27

##前置き
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/
19
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?