最終更新日:
公開日:
WEB制作
DockerでPHPを実行するコンテナを作る
コンテナイメージをビルドしてコンテナを起動するまでの流れを通して、DockerでPHPの実行環境を構築する方法について解説します。
この記事のポイント
- 開発向けPHP実行環境のコンテナを作成する
- Docker Hubからコンテナの設計が書かれた「イメージ」をダウンロードする
- ローカル環境とDockerコンテナ内のディレクトリを接続する
目次
PHPを実行するコンテナに必要なもの
開発向けのPHPを実行するコンテナを作っていきます。
必要なものは次の2つです。
- PHPのコンテナイメージ – Dockerコンテナの設計を記述したイメージ。今回はDocker Hubからダウンロードします。
- index.php – 実行するPHPのコードが記述されたファイル
2つのうち、1つ目の「コンテナイメージ」はコンテナの設計が記述されたファイルです。
こちらはDocker Hubからダウンロードして使用するため作成は不要です。
そのため、今回自前で用意するものはPHPコードを書いたファイルのみになります。
なお、Dockerはインストールされていることを前提として進めていきます。
これからインストールする場合は、別記事の「Dockerをインストールする」をご覧ください。
コンテナのイメージを確認する
まずは今回使用するPHPのコンテナイメージをDocker Hubより確認しておきましょう。
以下のリンクから開いてください。
Docker Hub
Docker Hubのページ上部にある検索スペースに、「php」と入力してみてください。
入力してみると、すぐ下に検索候補が表示されます。
この中から、一番上にある「php」を選択してください。
(検索を実行した後に一番上に表示される「php」を選択する形でも大丈夫です)
「php」を選択すると、PHPの公式コンテナイメージのページが表示されます。
公式のコンテナイメージはタイトルのすぐ下に青い文字で「Docker Official Images」と記載されています。
ページを下へスクロールすると、「DESCRIPTION」「REVIEW」「TAGS」の3つのタブがあります。
「DESCRIPTION」は使用できるアプリケーションのバージョンや基本的な使い方が記載されています。
「Supported tags and respective Dockerfile links」には使用できるイメージのタグが記載されています。
今回はPHPとApache(Webサーバー)が一緒になったイメージを使用するたため、「apache」のタグを使ってコンテナを作成します。
「apache」と同じ行に記載されている「8.0.3-apache-buster」や「8.0-apache」は別名のタグが付いているだけで、イメージ自体は同じものです。
常に最新バージョンのPHPを使った環境のコンテナを作りたいときは、今回のようにバージョンが明記されていない「apache」を使用します。
もし、「今後しばらく同じバージョンで開発を行いたい」、「以前の環境を再現したい」など明確な理由があるときは反対にバージョンを明記したタグを使用します。
PHPファイルを作成する
続いて、コンテナで実行するPHPコードを用意します。
今回はローカル環境の「/Users/test/docker/php/」にPHPコードを記述したファイルを配置していきます。
パスはご自身の環境で自由に置き換えてください。
まずは「index.php」というPHPファイルを作成して、以下のコードを入力してください。
index.php
<?php
echo "Hello, PHP on Docker!";
テキストを出力するシンプルなコードです。
現在は「php」ディレクトリ(フォルダ)に上記のファイルが1つだけある状態です。
コンテナを起動する
コンテナを起動する準備が整いました。
早速コンテナを起動して、PHPを実行してみましょう。
まずはコマンドを入力して実行するためにプロンプトを起動します。
Windowsで実行するなら「PowerShell」、Macの場合は「ターミナル」などを開いてください。
(コマンドの入力、実行ができるなら他のアプリケーションでも大丈夫です)
cdコマンドで、先ほどPHPファイルを配置したディレクトリに移動します。
例では「/Users/test/docker/php/」に配置しているので、cdコマンドで以下のように入力して実行します。
コマンド 入力例
$ cd /Users/test/docker/php/
念のため、lsコマンドでファイルを確認しておきましょう。
以下のように入力して、「index.php」が表示されれば準備万端です。
コマンド 入力&出力例
$ ls
index.php
もし先ほど作成したファイルが表示されない場合は、もう一度PHPファイルを設定したディレクトリを確認して、cdコマンドで移動してください。
続いて、Dockerのコンテナを起動するコマンドを入力します。
$ docker run -p 4000:80 -v ${PWD}:/var/www/html -d php:apache
実行すると、以下のようにイメージのダウンロードを開始します。
(もし以前に同じイメージを使ったことがある場合はすぐにコンテナが起動します。)
コマンド 入力&出力例
$ docker run -p 4000:80 -v ${PWD}:/var/www/html -d php:apache
Unable to find image 'php:apache' locally
apache: Pulling from library/php
f7ec5a41d634: Pull complete
941223b598b1: Pull complete
a5f2415e5a59: Pull complete
b9844b87f0e4: Pull complete
5a07de50b01b: Pull complete
caeca1337626: Pull complete
5dbe0d7f8141: Pull complete
7bc44096bfb0: Pull complete
dc87c3ea8f0b: Pull complete
c02fa4183668: Pull complete
a3bdae68ae09: Pull complete
757f28c05a2d: Pull complete
0831ef5c7c6f: Pull complete
Digest: sha256:52bed532a4cd1d08b1fb12f375d252
Status: Downloaded newer image for php:apache
6515087401e39e940fe2647435067a9615cbb5ee5214
無事にコンテナが起動したら最後の行に「コンテナID」が表示されます。
続いて、コンテナが起動していることを確認するために「docker container ls」を入力して実行してください。
コマンド 入力&出力例
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6515087401e3 php:apache "docker-php-entrypoint" About a minute ago Up About a minute 0.0.0.0:4000->80/tcp peaceful_fermi
docker container lsコマンドは現在起動しているコンテナの一覧を表示します。
一覧の左「CONTAINER ID」カラムには、コンテナIDを短く省略した値が表示されます。
ここで、先ほど実行したdocker runコマンドの解説をします。
docker runコマンドではコンテナイメージ「php:apache」に加えて、3つのオプションを指定しました。
- -p(–publish) – コンテナの使用するポート番号を設定
- -v(–volume) – コンテナ内のボリュームと、ローカル環境のボリュームを接続する
- -d(–detach) – コンテナをバックグラウンドで実行する
「-p」はコンテナのポート番号を指定することができます。
Webサーバーは一般的にポート番号「80」を使いますが、コンテナは代わりにポート番号「4000」を使用する指定をしました。
コンテナのポート番号は自由に設定できますが、他コンテナと同じポート番号を使うことはできません。
続いて「-v」ではコンテナ内のボリューム(ディレクトリ)「/var/www/html」とローカル環境のディレクトリ「/Users/test/docker/php/」を接続しています。
「${PWD}」はローカル環境の現在のディレクトリに置き換わります。
この変数を使うために、あらかじめcdコマンドでディレクトリを移動しました。
開発時はコードを修正してトライ&エラーを繰り返しますが、「-v」オプションをするうとローカル環境のindex.phpを修正したらすぐにコンテナ内のindex.phpも連動してすぐに修正が反映されるようになります。
3つ目の「-d」はコンテナをバックグラウンドで起動したままにする設定です。
このオプションがない場合、コンテナは起動したら処理を実行してすぐに終了してしまいます。
それではブラウザで表示して確認することができず不便なため、こちらのオプションを指定します。
それではブラウザを開いて、コンテナ内のPHPファイルを表示してみましょう。
コンテナ内ではWebサーバーのApacheが起動しているため、URLを入力するとすぐに表示することができます。
ブラウザを開いて、URLバーに「localhost:4000」と入力してアクセスしてみてください。
PHPファイルに記述したecho関数が実行されて、「Hello, PHP on Docker!」の文言が表示されたでしょうか。
続いて、PHPファイルを修正したらすぐにコンテナに反映されるか確認してみましょう。
ローカル環境のディレクトリ「/Users/test/docker/php/」にある「index.php」を開いて、「Hello,」を「Hi,」に修正して上書き保存してみてください。
index.php
<?php
echo "Hi, PHP on Docker!";
ブラウザを再読み込み(リロード)してみてください。
ローカル環境のPHPファイルとコンテナ内のファイルがうまく接続されていると、表示が「Hi, PHP on Docker!」に切り替わります。
PHPファイルを追加する
index.phpを編集するとすぐにコンテナにも反映されることが確認できました。
続いて、今度は新しいファイルを1つ追加してみましょう。
index.phpと同じディレクトリに「test」というディレクトリを作り、その中にinfo.phpを作成してください。
info.phpにはインストールされたPHPの情報を出力するphpinfo関数を記述します。
info.phpをエディタで開いて、以下のコードを記述します。
index.php
<?php
phpinfo();
新しく追加したファイルも、「-v」オプションで接続したディレクトリ内であればコンテナにすぐ反映されます。
今回はtestディレクトリも作成しているので、コンテナ内には「/var/www/html/test/info.php」というファイルが新しく追加されます。
info.phpをブラウザで表示してみましょう。
ブラウザを開いてURLバーに「localhost:4000/test/info.php」と入力してください。
コンテナのPHP環境の一覧が表示されます。
これで、ファイルの編集や追加ができるPHPコンテナを作成することができました。