Dockerのphp-fpmのイメージをコンテナ化してPHPのWebアプリを動かしてみた。

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です