【開発環境 #5】PHP開発環境の構築【WSL2,Docker】
今回はDockerでPHPの開発環境を構築します。
WSL2 + Docker の記事一覧
Docker イメージの選定
Docker Hubへアクセスし、使用したいイメージ名を検索します。
- Docker Hubの上部検索フォームで「php」と検索
- 検索結果からphp✓Official Imageを選択
- タブメニューのTagsをクリックし任意のバージョンを選択する
- 今回はapache
- 画面に表示されているphp:apacheが使用する<イメージ:タグ(バージョン)>になります
ディレクトリ構造
WSL2のUbuntuでの構成は以下になります。/home/dev/phpを開発ディレクトリとします。
home/
`-- dev/
`-- php/
コンテナの作成と起動
Windows TerminalでUbuntuに接続し、以下のコマンドを実行します。
$ pwd
/home/dev/php
$ docker run --name php -p 8080:80 -d php:apache
Unable to find image 'php:apache' locally
apache: Pulling from library/php
......
......
コンテナの作成と起動に成功しました。コマンドの簡単な解説は以下となります。docker runコマンドの詳細やその他のオプションは公式サイトに詳しいです。
- --name php
- コンテナの名前
- -p 8080:80
- localhost:8080のアクセスをコンテナのポート80に繋げる
- -d
- デタッチドモード。コンテナをバックグラウンドで稼働させ続ける
コンテナイメージとコンテナの確認
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
php apache b4e8e213b0ec 5 minutes ago 477MB
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b075fb8fa1c php:apache "docker-php-entrypoi…" 1 minutes ago Up 1 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp php
コンテナの作成と起動、バックグラウンドでの実行が確認できました。
ブラウザでアクセスする
webブラウザでhttp://localhost:8080へアクセスしてみます。ファイルを何も用意していないので、404 Not Foundとなりますが、Apache/2.4.51 (Debian) Server at localhost Port 80と表示がされ、Apacheが動いていることが確認できます。
コンテナを停止させる
$ docker stop php
コンテナを破棄する
$ docker rm php
php
Docker ビルド
さて、簡単にPHPの実行環境が構築できましたが。次は、公式に用意されたイメージを使用するのではなく、自身で開発したファイルを含んだDockerイメージをつくります。
ビルドコンテキスト
Ubuntuの/home/dev/phpをビルドコンテキストとします。最終的に以下の構成になります。
home/dev/php/
|-- Dockerfile
`-- index.php
Dockerイメージをつくる
先ほどつくったDockerfileでDockerイメージを作ります。Windows TerminalでUbuntuに接続します。
$ pwd
/home/dev/php
$ docker build -t my-php:hello .
[+] Building 0.4s (7/7) FINISHED
=> [internal] load build definition from Dockerfile
......
=> => naming to docker.io/library/my-php:hello
作成したイメージを確認してみます。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-php hello a134aff7ebe1 About a minute ago 477MB
php apache b4e8e213b0ec 2 days ago 477MB
コンテナの作成と起動
では、作成(ビルド)したイメージからコンテナの作成と起動をしてみます。
$ docker run --name my-php -p 8080:80 -d my-php:hello
ec0e79ad79e5.....
ブラウザでアクセスする
webブラウザでhttp://localhost:8080へアクセスしてみます。
HELLO WORLD(index.phpの内容)が表示され、ファイルがコンテナにコピーされていることが確認できました。必要なくったコテンナを停止し削除しておきます。
ディレクトリのマウント
開発環境の構築とファイルのコピーができるようになりました。ですが、完成ファイルのみのコピーだけでは実用的ではありません。次は、ホスト側のディレクトリをコンテナ内のディレクトリにマウントし、ホスト側での編集作業(開発中のコード)をコンテナから参照できるようにします。
ビルドコンテキスト
Ubuntuの/home/dev/phpをビルドコンテキストとします。最終的に以下の構成になります。ホスト側のsrcをコンテナのApache公開ディレクトリである/var/www/htmlへマウントします。
home/dev/php
|-- docker/
| |-- Dockerfile
| `-- php.ini
`-- src/
`-- index.php
今回はPHPのバージョンを指定してみます。
php.iniの内容は省略します。
ビルド
$ pwd
/home/dev/php
$ docker build -t my-php:hello ./docker
[+] Building 0.4s (7/7) FINISHED
=> [internal] load build definition from Dockerfile
......
=> => naming to docker.io/library/my-php:hello
コンテナの作成と起動
では、イメージからコンテナの作成と起動をしてみます。
$ docker run -p 8080:80 -v ~/php/src/:/var/www/html -d --name my-php my-php:hello
0ec6b5aa4.....
ブラウザでアクセスする
webブラウザでhttp://localhost:8080へアクセスしてみます。
HELLO WORLD(index.phpの内容)が表示されました。
新規ファイルを作成
home/dev/php/srcにtest.phpというecho 'test';
と表示だけするPHPファイルを新規作成しhttp://localhost:8080/test.phpへアクセスしてみます。
test(test.phpの内容)と表示され、home/dev/php/srcでの開発作業が反映されているのが確認できました。
終わりに
駆け足ではありましたがコンテナの作成や起動はできるようになりました。
ドキュメント
Dockerやオプションなどの詳細は以下のリンクが参考になります。