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

ubuntu24.04LTS に Docker Engine をインストールしてみた。

ubuntu24.04LTS に Docker Engine をインストールしてみました。作業はrootユーザーで行っています。

まずは Docker Engine のインストールに必要なパッケージを取り込みます。すでに ca-certificates や curl がubuntuにインストールされていればこの作業は不要です。


# apt install ca-certificates curl

次に、GPGキーの追加をします。GPGキーの追加には apt-key コマンドがありますが、このコマンドは非推奨になっているとのことで以下のようにします。docker.asc がGPGの公開鍵です。


# install -m 0755 -d /etc/apt/keyrings
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
# chmod a+r /etc/apt/keyrings/docker.asc

Docker公式リポジトリの追加を行います。

リポジトリの追加を行うには add-apt-repository コマンドがありますが、このコマンドは Launchpad(ubuntuのPPA)用に設計されたものです。Dockerは独自のリポジトリ(PPAではない)を使っており、公開鍵の扱いや署名方式もやや異なるため add-apt-repository は使わないほうが良いとのことです。そのため /etc/apt/sources.list.d 配下に手動で docker.list ファイルを作成します。


# echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

なお太字の部分ですが環境によって異なります。前半のアーキテクチャは dpkg コマンドで確認できます。


# dpkg --print-architecture

後半の太字はubuntuのバージョンです。24.04LTSの場合は noble になります。22.04LTSであれば jammy です。

ここまでの作業が終わったらパッケージリストの更新を行います。


# apt update

Docker Engine のインストールをします。


# apt install docker-ce docker-ce-cli containerd.io

バージョンの確認をしてみます。


# docker --version

2025年4月の時点でDockerのバージョンは version 28.1.1, build 4eba377 でした。

Dockerをインストールした初期状態ではroot権限がないと作業ができません(rootでないとdockerコマンドを使えません)。ですので通常ユーザーでも作業ができるようにしておきます。


# usermod -aG docker user

太字の user は普段使っているユーザー名になおしてください。一度ログアウトして再ログインをすると通常ユーザーでも docker コマンドが使えるようになります。