Docker (7) - nginx+php-fpm -
Dockerを使ってNginxでPHPが表示されるようにやってみた
Nginx側
server {
listen 80;
root /usr/share/nginx/html;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
別コンテナにあるphp-fpmを利用するようにするのでfastcgi_passにはコンテナ起動時に指定する--nameの名前を指定。index.phpは適当にphpinfoするだけのスクリプトだけ作っておいてあとはDockerfileを作るだけ
FROM nginx
COPY index.php /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
あとはビルドしておく
docker buildx build -t nginx .
php-fpm側
php-fpmの設定をデプロイするためphp-fpm.confを作成
listen = 0.0.0.0:9000
んでphp-fpmの設定をデプロイしてphp-fpmが起動するようにDockerfileを作成
FROM php:8.2-fpm
COPY php-fpm.conf /usr/local/etc/php-fpm.d/
EXPOSE 9000
あとはビルドしておく。ちなみにDockerでPHPの拡張モジュールとかの設定をする場合にはhttps://hub.docker.com/_/phpのPHP Core Extensionsセクションを参考に
docker buildx build -t php-fpm
コンテナの起動
起動する前に同じネットワークを使用するようにするのでDocker Networkを作る
docker network create --subnet 172.16.0.0/16 --attachable mynet
んでまずphp-fpm側を先に起動する(fastcgi_passの名前解決ができないため)
docker run -d --name=php-fpm --net=mynet --expose=9000 -v www:/usr/share/nginx/html -t php-fpm
Docker Volumeを指定してNginx側が使用するファイルを参照できるようにしておく。あとはNginx側を起動
docker run -d -p 80:80 --net=mynet -v www:/usr/share/nginx/html -t nginx
あとはNginx側にアクセスしてみてちゃんとPHPが処理されて表示されるか確認
余談
Docker Composeを使用していない理由はDockerの基本的な基礎を学ぶためにあえて使用してない。まあDocker Compose使った方が圧倒的に楽なんでしょうけどw