いがにんのぼやき

WEBエンジニアのブログ。IT、WEB、バンド、アニメ。

Dockerでnginx + php-fpm環境を立てる

最近ちょっとずつDockerを触っている。
手慣れると本当に爆足で環境構築できて、本当に便利だ。

今回はdocker-composeを使用してnginxとphp-fpmのサーバーを立ててみる。

nginx

まずnginxから。

docker-compose.ymlというファイルを作成し、下記のようにする。

version: '2'
services:
# localhost:8080
  nginx:
    image: nginx
    ports:
      - "8080:80"
    volumes:
      - ./web:/web

これで、webというディレクトリ配下を見るnginxのコンテナが立ち上がる。

php-fpm

servicesのところに、下記を追加する

  php:
    image: php:fpm
    volumes:
      - ./web:/web

phpのときにweb配下のphpを読み込むようになる。

連携

nginxとphp-fpmを連携するとこんな感じになる。

version: '2'

services:
# localhost:8080
  nginx:
    image: nginx
    ports:
      - "8080:80"
    volumes:
      - ./web:/web
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf # php-fpmのための設定の読み込み
    links: # host追加
      - php

  php:
    image: php:fpm
    volumes:
      - ./web:/web

追加したのはphp-fpmのためのnginxの設定ファイルの共有と、その設定ファイル内で使用するホストのための記述。

default.confは雑にこんな感じ。

server {
    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 /web;

    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;
    }
}

fastcgi_passのphp:9000はlinksに書いたphpからホスト解決される。

データベースやXDEBUGを使えるか検証していないので、そこらへんを触ったらまた記事にしたいと思う。