ubuntu24.04LTSにNginxのWebサーバーを立て、PHP7.4でWebアプリを稼働させています。7.4はもう古いのでPHPのバージョンアップをします。ただ、一部のPHPのWebアプリがバージョンを上げたPHP向けに修正ができておらず、PHP7.4も残したい。仕方がないのでPHP7.4はDockerのコンテナで稼働させることにしました。このような感じです。
ubuntuへのDockerのインストールは済んでいるものとします(すみませんが省略します)。
Dockerのコンテナで実行するphp-fpmですが、Docker Hub にある 7.4.33-fpm を使います。
このイメージのDockerfileの抜粋です。
WORKDIR および EXPOSE を見ると、Webアプリケーションを配置するディレクトリは /var/www/html で、ポート9000でHTTPリクエストを受け付けるようになっています。あとで後述しますが、コンテナ起動の際にはこれらをパラメータとして指定をします。
Nginxの設定を変更します。
Nginxの fastcgi_pass ディレクティブの向き先はローカルPC上のPHP7.4ですので、Docker Engineに向けてリクエストを送るようにします。Docker EngineのIPアドレスはifconfigコマンドで確認できます。docker0 というインターフェイスです。
僕の環境では 172.17.0.1 となっていました。fastcgi_pass ディレクティブの設定を以下のようにします。
変更前
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
変更後
fastcgi_pass 172.17.0.1:9000;
Nginxの再起動をします。
それではDocker Engineで 7.4.33-fpm のコンテナを起動させてWebアプリを動かします。この際に、ローカルPC上のPHPのWebアプリをバインドマウントする、および、ポートフォワードの設定をします。
まずバインドマウントですが、ローカルPC上のPHPのWebアプリの格納先を確認します。僕の場合は /var/www/html 配下です。ですので、ここのディレクトリをコンテナから参照できるようにします。コンテナ側のWebアプリケーションを配置するディレクトリ(前述のDockerfileの WORKDIR 指定の場所)から見えるように -v /var/www/html:/var/www/html というパラメータをコンテナ起動時に指定します。
次にポートフォワードですが、NginxからはDocker Engineのポート9000にリクエストを転送しています。Docker Engineからコンテナにリクエストを渡すために -p 9000:9000 というパラメータ指定をします。
HTTPリクエストの転送イメージです。
コンテナを起動させます。Dockerコマンドは以下です。コンテナの名前は php74-fpm としていますが、適宜変更をしてください。
$ docker run -dit --name php74-fpm -p 9000:9000 -v /var/www/html:/var/www/html php:7.4.33-fpm
$ docker ps でコンテナの起動を確認したら、Webブラウザからアクセスができます。
なお、コンテナの停止と再開は以下のコマンドでできます。
コンテナの停止
$ docker stop php74-fpm
コンテナの再開
$ docker start php74-fpm