DockerのNginxでPHPを表示してみる
※CentOS7(Vagrant)の環境
index.phpを用意し、
$ mkdir html $ vi html/index.php <?php echo 'Hello, world!';
PHP-FPMのコンテナを起動。
$ docker run -d --name hoge_php --rm -v /home/vagrant/html:/var/www/html php:fpm
default.confをネットの情報を見様見真似で作成し、
$ vi default.conf
server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } location ~ \.php$ { root /var/www/html; fastcgi_pass hoge_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; } }
Nginxのコンテナを起動。
$ docker run -d --name hoge_web -p 80:80 --rm -v /home/vagrant/default.conf:/etc/nginx/conf.d/default.conf nginx
しかし、Nginxのコンテナが起動していない。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9c049e4dedee php:fpm "docker-php-entrypoi…" 2 minutes ago Up 2 minutes 9000/tcp hoge_php
フォアグラウンドで起動してみると、hoge_phpなんてホストは無いよ、と怒られてた。
$ docker run --name hoge_web -p 80:80 --rm -v /home/vagrant/default.conf:/etc/nginx/conf.d/default.conf nginx ・・・ nginx: [emerg] host not found in upstream "hoge_php" in /etc/nginx/conf.d/default.conf:12
デフォルトでは、ネットワークは下記の3つあり、
$ docker network ls NETWORK ID NAME DRIVER SCOPE f2337f34777d bridge bridge local ace3dc876a4c host host local adcbb2bfc1a5 none null local
何も指定しないと、bridgeのネットワークに接続してるみたい。
$ docker network inspect bridge [ { "Name": "bridge", ・・・ "Containers": { "9c049e4dedee11cb3ff40c233556592368952ad97cf45ea8f8a47944ffd919f8": { "Name": "hoge_php", ・・・ } }, ・・・ } ]
しかし、下記のドキュメントによると、デフォルトブリッジはDNS解決しないみたい。
ブリッジネットワークの利用 https://matsuand.github.io/docs.docker.jp.onthefly/network/bridge/
ということで、
一旦、コンテナを停止し、
$ docker stop hoge_php
ネットワークを作成し、
$ docker network create hoge_net $ docker network ls ・・・ 67fc2abb14d0 hoge_net bridge local ・・・
改めて、--networkを指定して、コンテナを起動。
$ docker run -d --name hoge_php --network hoge_net --rm -v /home/vagrant/html:/var/www/html php:fpm
$ docker run -d --name hoge_web --network hoge_net -p 80:80 --rm -v /home/vagrant/default.conf:/etc/nginx/conf.d/default.conf nginx
これで、index.phpが表示できた。