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
連携
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を使えるか検証していないので、そこらへんを触ったらまた記事にしたいと思う。