DockerでPHPの実行環境を作る方法を記載しています。
本記事では、dockerとdocker-composeコマンドを使用して、php, nginx, mysql, phpMyAdminが入っている環境を作成します。
PHPの実行環境について
PHPを実行する環境については、dockerを使用する他にもvagrant, mamp, xamppなどを使ったりローカルに直接インストールするなどの方法があります。
今回はdockerを使用した環境を構築します。
dockerのメリットとして、下記などがあります。
・直接インストールするわけではないので、仮想環境を削除すれば綺麗に消せてローカル環境を汚さない
・Dockerfileやdocker-compose.ymlを用意することで、環境構築がコマンドひとつで可能
構成するファイルさえ用意すれば、開発環境の共有が可能なので、おすすめです。
この記事の目標(作るもの)について
dockerを使用した環境で、phpが使えるようにして”Hello, World”が出力されるプログラムを作成してみます。
作成してアクセスすると、このように表示されます。
phpMyAdminが立ち上がっているかも画面から確認できるので、立ち上げた後に確認してみます。
アクセスすると、このように表示されます。
今回作成する環境について
今回作成する環境を簡単に説明します。
- php
phpを実装するためのに入れています。
今回は、nginxと連携するためにphp-fpmを使用しています。 - nginx
nginxはhtmlやphpの出力結果をクライアントのブラウザ画面に表示するためのwebサーバーです。 - mysql
データを保存しておくためのデータベースです。
phpなどのプログラミング言語からアクセスして送信されたデータを保存したり参照したりするために使います。 -
phpMyAdmin
mysqlのデータをweb画面で見るためのツールです。
SQLを発行することもでき、データベースのデータ変更なども可能です。
Dockerとは
dockerは使用しているパソコンに仮想環境を作成するためのツールです。
定義したファイルを元に実行することにより、簡単に開発環境を作成できます。
Macで実行環境を作る
Docker Desktop for Macをインストールする
Docker Desktop for Macを公式サイトのこちらからインストールします。
赤枠の箇所をクリックすると、ダウンロードが始まるのでダウンロードが終わるまで待ちます。
ダウンロードが終わったあとは、ダウンロードしたdmgファイルをクリックすると、このように表示されます。
左から右にドラック&ドロップして、アプリケーションディレクトリにDockerを配置します。
あとは、アプリケーションディレクトリにあるDockerをクリックすると起動します。
このようにパソコンの右上にアイコンが表示されているので、動作していることが確認できます。
Windowsで実行環境を作る
Windows10 Proでないと、Docker Desktop for Windowsは使えないようでした。
Docker Desktop for Windowsをインストールする
Docker Desktop for Windowsを公式サイトのこちらからインストールします。
赤枠の箇所をクリックすると、ダウンロードが始まるのでダウンロードが終わるまで待ちます。
ダウンロードしたファイルをインストールして、windowsの常駐しているアイコンの箇所にdockerのアイコンが出ていると完了です。
Dockerを使ってみる
インストールしたDockerを使用して、PHPの実行環境を作成します。
dockerコマンドが使えるか確認する
ターミナルについては、こちらを確認してください。
ターミナルを立ち上げたら、下記のコマンドを実行します。
$ docker -v
コマンドを実行すると、このようにバージョン情報が返ってきます。
問題なくバージョンが確認できればOKです。
$ docker -v
Docker version 20.10.2, build 2291f61
コンテナの構成ファイルのインストール
docker-compose.ymlなどのファイルをこちらに置いているので、git cloneするかダウンロードします。
任意のディレクトリにて、git cloneする場合は下記のコマンドを実行してください。
$ git clone https://github.com/YasuakiHirano/codelike_web_docker.git
実行したディレクトリ配下にcodelike_web_docker
ディレクトリが作成されます。
cdコマンドで、移動して環境を立ち上げます。
$ cd codelike_web_docker
docker-composeコマンドで立ち上げる
codelike_web_docker
に移動した後に、下記のコマンドを実行します。
$ docker-compose -f .codelike_web_docker/docker-compose.yml up -d
すると、このようにインストールなどが走るので暫く待ちます。
$ docker-compose -f .codelike_web_docker/docker-compose.yml up -d
Creating network "codelike_web_docker_default" with the default driver
Building php
Step 1/8 : FROM php:fpm
---> 1e915dc40edc
// ---- 省略 ----
Creating codelike_web_mysql ... done
Creating codelike_web_phpmyadmin ... done
Creating codelike_web_php ... done
Creating codelike_web_nginx ... done
このように、4つそれぞれ、doneが出てきていたら環境構築完了です。
docker ps
コマンドを実行してみます。
$ docker ps
すると、このようにコンテナが立ち上がっていることが確認できます。(出力結果は一部省略しています)
$ docker ps
NAMES
codelike_web_nginx
codelike_web_phpmyadmin
codelike_web_php
codelike_web_mysql
立ち上がった環境を画面から確認する
立ち上がっていることはdocker ps
で確認可能ですが、実際にphpが動いているか確認してみます。
エディターを開いてください。一番簡単で有名すぎるプログラムを書きます。
下記の内容をindex.php
という名前で作成して、codelike_web_docker
ディレクトリ配下に保存します。
<?php
echo "Hello, World!!";
保存したら、`http://localhost:8080`にアクセスしましょう。
このように表示されたら成功です。
phpMyAdminも画面で確認できるので、アクセスしてみましょう。
`http://localhost:8888`にアクセスしましょう。
このように表示されたら成功です。
このポート番号(8080、8888)は.codelike_web_docker/docker-compose.ymlに定義してあるため、この番号になっています。
docker環境の停止について
dockerの環境を使用しない場合は停止しておきましょう。
下記のコマンドを実行すると停止できます。
$ docker-compose -f .codelike_web_docker/docker-compose.yml down
また、起動し直す場合は下記のようにup
コマンドを使用します。
$ docker-compose -f .codelike_web_docker/docker-compose.yml up -d
dockerコンテナへのログイン・ログアウト
dockerのphpコンテナにログインしてコマンドを実行する方法と、ログアウトについてです。
phpコマンドを使いたい場合などはログインして、使うことができます。
ログインする
下記コマンドでphpのコンテナに入ることが可能です。
$ docker-compose -f .codelike_web_docker/docker-compose.yml exec php /bin/bash
phpコンテナと、ローカルのindex.phpを置いたディレクトリ配下は共有しているので、同じファイルが配置されています。
下記のように、lsコマンドで確認すると表示されます。
root@f0635bc4aacf:/var/www/html# ls
README.md index.php
phpのバージョンを確認するにはphp
コマンドにvオプションを付けます。
root@f0635bc4aacf:/var/www/html# php -v
PHP 7.4.9 (cli) (built: Aug 6 2020 19:20:05) ( NTS )
Copyright (c) The PHP Group
ログアウトする
exit
コマンドを使うと、ログアウトして元の環境に戻ることが可能です。
root@f0635bc4aacf:/var/www/html# exit
exit
xxx codelike_web_docker $
この環境のドキュメントルートについて
ドキュメントルートはwebサーバーのファイル外部に公開するファイルを置いている場所になります。
今回作成した環境でのドキュメントルートは`codelike_web_docker配下になります。
index.phpをcodelike_web_dockerに配下に置いて、実行しました。
index.phpという名前は特殊な名前で、nginxの設定で、そのディレクトリに来たら表示するようにしています。
なので、http://localhost:8080/
でindex.phpが読み込まれました。
index.php以外の名前で、PHPを実行した場合は、URLにファイル名をつけるようにしましょう。
例えば、hello.php
という名前のファイルを作成して、ブラウザの画面で実行・表示したい場合ですが
http://localhost:8080/hello.php
としてください。
その他のPHP入門のオススメ記事
そのほかに、このブログで書いているオススメ記事をご紹介します。
変数を使ってみよう
作った環境を使用して、PHPの変数を使ってみましょう。詳細は下記です。
PHP入門の記事一覧に戻る
こちらに他の情報もありますので、合わせてご確認ください。
コメント
yasuaki 様
Docker – PHP環境構築とても参考になりました。ありがとうございます!
お役に立てて何よりです😄
お世話になります。
docker compose.ymlを実行中に以下のエラーが出て止まってしまいました。
お手数ですが、回避策をご教示いただければ幸いです。
どうぞよろしくお願いいたします。
path /mnt/c/Users/user name/web_docker/.codelike_web_docker/php/log is mounted on /mnt/c but it is not a shared mount.
余談ですが、lamp環境を作りたくてdocker composeでインストールするも、mysqlだけが起動できずにいます。ネットでも同様の状況になる方がいらっしゃり、サイトを参考に何度もトライしましたができませんでした。。。途方に暮れていた時にこちらのサイトにたどり着きました。
なんとか起動させたいです。
よろしくお願いいたします。
ご覧いただきありがとうございます。
エラーとしては
.codelike_web_docker/php/log
フォルダが共有されていないような感じですね。お使いのパソコンはWindowsでしょうか?
こちらにあるように下記コマンドで、dockerボリュームを削除した後に再起動してみてはいかがでしょうか。
お世話になっております。
ご連絡ありがとうございます。
当方、win10Proを使用しております。
昨日エラーが出た時点で、dockerのtroubleshootからReset to factory defaultsを実行してして空っぽの状態にしたのですが、これはdocker volume rm -fと同じことをしたと理解してよいでしょうか。
先ほど再度docker-composeを実行し、インストールできました!
この度はご教示くださり、ありがとうございました。
お世話になります。
なるほど、Windowsでしたか。
「Reset to factory defaults」は設定やデータなど全てを初期化してくれるようですね。
docker volume rm -f [volume名]
は、dockerで作成された指定したvolumeを削除するので、範囲がもっと狭い感じですね。とりあえず上手く動いたということで、よかったです😄
初めまして。お世話になります。
docker-compose -f .codelike_web_docker/docker-compose.yml up -dの実行中に、Container codelike_web_php の部分のみエラーが出て上手く立ち上がりません。
エラーの文章は下記の通りです。
Error response from daemon: invalid mount config for type “bind”: bind source path does not exist: /Users/ryotaro/php_study/codelike_web_docker/.codelike_web_docker/php/log
セキュリティ関連かなと思いdocker desctopやmacbookの設定をいじりましたがエラーは以前として同様です。お手数ですがご確認お願いいたします。
初めまして、ご覧いただきありがとうございます。
「パスが存在しません」みたいなエラーですね。
ディレクトリの権限まわりが怪しそうです。
.codelike_web_docker
の配下にphp
ディレクトリを作成して、その中にlog
ディレクトリを作成してみてください。その後に
.codelike_web_docker
に対して、chmod -R 777 .codelike_web_docker
などとして権限を変更してみてください。これで立ち上がらない場合は、下記のようにフルディスクアクセスを設定してみてください。
https://github.com/docker/docker.github.io/issues/4709#issuecomment-639596451
以上になります、よろしくお願いします。