nginxのコンテナは起動したと思いますので、次はphp-fpmのコンテナを立ち上げてnginxをunixドメインソケットで連携するところまでやってみたいと思います。ここから急に難しくなりますので注意深く読みながら進めてください。
unixドメインソケットについてはこちらで軽く勉強しておいてください。

Unix Domain Socketって何?
Unix Domain Socketって何?
Unix Domain Socketは同一マシン上でプロセス間通信するための仕組みです。ソケットとは受け口、バケツみたいなイメージですがまさにその通りで受け口をつくっておいて通信が来るのをまっています。PHPでもPythonでもfast c…
Unix Domain Socketは同一マシン上でプロセス間通信するための仕組みです。ソケットとは受け口、バケツみたいなイメージですがまさにその通りで受け口をつくっておいて通信が来るのをまっています。PHPでもPythonでもfast c…
unixドメインソケットを使ってnginxとphp-fpmのコンテナで通信させるには
- volumeをつくる
- php-fpmコンテナでマウントする
- unixドメインソケットの出力先をこのvolumeにする
- nginxのコンテナからそのunixドメインソケットのファイルを読み書きするように設定する
![]() | PHPフレームワーク Laravel入門 第2版【電子書籍】[ 掌田津耶乃 ] 価格:2970円 |

![]() | PHPフレームワークLaravel入門第2版 [ 掌田津耶乃 ] 価格:3300円 |

volumeをつくる
その前にdockerのvolumeてなんだというのをこの記事で学んでください。OGP画像がないので表示がへんですが、このページの画像が非常にわかりやすかったのであえて選びました。

ボリュームの利用
ボリュームの利用
ボリュームを利用します。
ボリュームを利用します。
次にdocker-compose.ymlを編集します。編集といっても2行追加するだけですが・・・。
name: twitter-clone
volumes:
twitter-clone-php-fpm-socket:
services:
web:
container_name: twitter-web
image: nginx:latest
ports:
- "9999:80"
servicesの前にvolumesという項目を追加するだけで、volumeを作ってくれます。概念は難しいかもしれませんが、作業としては簡単ですね。
php-fpmコンテナでマウントする
この作ったvolumeをphp-fpmのコンテナにマウントします。マウントしてそこにphp-fpmのunixドメインソケットのファイルを出力するように設定します。いつものようにdocker-compose.ymlを。
name: twitter-clone
volumes:
twitter-clone-php-fpm-socket:
services:
web:
container_name: twitter-web
image: nginx:latest
ports:
- "9999:80"
php:
container_name: twitter-php-fpm
image: php:8.3-fpm
volumes:
- twitter-clone-php-fpm-socket:/run/php
phpのコンテナをnginxと同じようにphpとして追加しました。そしてそのvolumeの項目に先ほど作ったvolumeをマウントします。
twitter-clone-php-fpm-socket:/run/phpで書かれているコロンの右側はコンテナの中のパスです。twitter-clone-php-fpm-socketというdockerのvolumeがphp-fpmのコンテナの/run/phpにマウントされました。
php-fpmのunixドメインソケットの出力先をこのvolumeにする
デフォルト設定をもってくる
# まずはconf格納するディレクトリをつくる
mkdir -p docker/conf
docker run --rm --entrypoint=cat php:8.3-fpm /usr/local/etc/php-fpm.d/zz-docker.conf > docker/conf/zz-docker.conf
php-fpmの設定ファイルを編集する
[global]
daemonize = no
[www]
user = www-data
group = www-data
listen = /run/php/php-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0666
listen = 9000となっているところを、このローカルのパスに変更するとphp-fpmがunixドメインソケットで通信するようになります。その下の設定はファイルのオーナーとパーミッションです。nginxから読み書きできるように追記します。
設定ファイルをマウントする
name: twitter-clone
volumes:
twitter-clone-php-fpm-socket:
services:
web:
container_name: twitter-web
image: nginx:latest
ports:
- "9999:80"
php:
container_name: twitter-php-fpm
image: php:8.3-fpm
volumes:
- twitter-clone-php-fpm-socket:/run/php
- ./conf/zz-docker.conf:/usr/local/etc/php-fpm.d/zz-docker.conf:ro
今度はローカルファイルをコンテナのパスに設定して、上書きします。これで先程www-dataとかいたzz-docker.confが上書きされました。最後のroというのはreadonlyという意味です。ファイル変更しない場合はこれをつけておくと多少のスピード改善が可能です。
![]() | Laravelの教科書 バージョン10対応 [ 加藤 じゅんこ ] 価格:3300円 |

![]() | PHPフレームワークLaravel実践開発 [ 掌田津耶乃 ] 価格:3300円 |

nginxのコンテナからそのunixドメインソケットのファイルを読み書きするように設定する
デフォルトの設定ファイルを取得する
phpのときと同じようにデフォルトの設定ファイルを取得します。
docker run --rm --entrypoint=cat nginx /etc/nginx/nginx.conf > docker/conf/nginx.conf
2行目にある user nginx; のところを user www-data; と書き換えるだけです。
php-fpmと同じようにマウントして上書きする
docker-compose.ymlを編集します
name: twitter-clone
volumes:
twitter-clone-php-fpm-socket:
services:
web:
container_name: twitter-web
image: nginx:latest
ports:
- "9999:80"
volumes:
- twitter-clone-php-fpm-socket:/run/php
- ./conf/nginx.conf:/etc/nginx/nginx.conf:ro
php:
container_name: twitter-php-fpm
image: php:8.3-fpm
volumes:
- twitter-clone-php-fpm-socket:/run/php
- ./conf/zz-docker.conf:/usr/local/etc/php-fpm.d/zz-docker.conf:ro
これでnginxとphp-fpmのコンテナはunixドメインソケットで通信できる下準備はできました。まだdocument rootの設定やnginx側のunixドメインソケットのパス設定などが残っているのでこのままではブラウザにはphp実行結果は表示できません。
LaravelのWelcomeページまで書こうかなと思いましたがけっこうなボリューム(複雑さ)になってきたのでここらで終わりとします。次回はLaravelのWelcomeページを表示するところまでやってみたいと思います。