はじめに
新規でPHP開発をするにあたり、
- どうせならDockerで開発したい
- でも、やっぱりファイルはホスト側で書いて同期させたい
と思い構築手順をまとめました。
ザクザク行けば15分程度でApacheを起動してPHPを動かせると思います。
※Docker自体のインストールはDockerをMacにインストールするをご覧ください。
また、@y_tsubukuが開発するyaritori - メール共有システムも、良ければご覧ください
PHP7.0 + Apacheを起動する
docker run -d -p 80:80 --name php70-apache php:7.0-apache
でイメージからコンテナを立ち上げる。(ローカルにimageがない場合はDocker Hubから取得してくれる。)
今回はNAMESにphp70-apache
と指定しました。
また、-p
オプションでポートを80番でフォワードします。
$docker run -d -p 80:80 --name php70-apache php:7.0-apache
Unable to find image 'php:7.0-apache' locally
7.0-apache: Pulling from library/php
10a267c67f42: Pull complete
370377701f89: Pull complete
455c73a122bc: Pull complete
fb71bac61c47: Pull complete
288a1d91ad4e: Pull complete
86e0256ba4b0: Pull complete
f14fbe7a9dfb: Pull complete
0f36dd91c0ab: Pull complete
ee4d938396ab: Pull complete
a0e5f6ef63c3: Pull complete
0aecbd237b32: Pull complete
79b4b986d794: Pull complete
8d9a245edba8: Pull complete
Digest: sha256:2f52564c919bef8efb56b12ee6490b03c41af0c37823a6bc0930cfa4586d09f4
Status: Downloaded newer image for php:7.0-apache
d71231ac60056802ece90fba8fcff3230e593b705f76a77b59078194bec93211
docker container ls
で立ち上がっているか確認する。
$docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d71231ac6005 php:7.0-apache "docker-php-entryp..." 15 hours ago Up 31 seconds 0.0.0.0:80->80/tcp php70-apache
良い感じ!NAMESにもちゃんとphp70-apache
が反映されてます。
localhostにアクセスしてブラウザで確認する
これでApacheが立ち上がっている事を確認できました。
ですが、今はForbiddenページしか表示されないので、実際にPHPを書いて表示させてみましょう。
まずは、php70-apache
コンテナにログインします。
$docker container exec -ti php70-apache bash
すると、カレントディレクトリがドキュメントルートである/var/www/html
となっているはずです。
#一応確認
root@d71231ac6005:/var/www/html# pwd
/var/www/html
$echo '<?php phpinfo();' > index.php
これで再度、localhostにアクセスしてみましょう。
良い感じ!これでPHP7.0とApacheが正しく動作していることを確認できました。
ホスト⇔コンテナ間でディレクトリを同期する
直接コンテナにファイルを置いて、そこでザクザク開発するのもありっちゃありですが、
コンテナを削除した際に同時にそのコンテナ内にあるファイルも消えてしまいます。
ですので、ホスト側とコンテナのディレクトリを同期させて、そこにファイルを書き込む形式をとりましょう。
まずは、先程作成したコンテナは削除します。
# コンテナを停止
$docker container stop php70-apache
# コンテナを削除
$docker container rm php70-apache
そして、新しくディレクトリが同期されるコンテナを作成しましょう。
ホスト側の同期対象となるディレクトリを
/Users/y-tsubuku/docker/php70-apache/www
コンテナ側はドキュメントルートである
/var/www/html
としました。
$docker run -d -p 80:80 -v /Users/y-tsubuku/docker/php70-apache/www:/var/www/html --name php70-apache php:7.0-apache
41daf7f2647bc016db8b3d60ba14b67644b0f33f3d36477ab9e2ff63a70c2e6a
これで/Users/y-tsubuku/docker/php70-apache/www
にいる場合に
$echo '<?php phpinfo();' > index.php
これで再度、localhostにアクセスしてみましょう。
これで、(先程と同じ画面ですが)ホスト側で作成されたファイルがコンテナへ正しく同期されていることを確認することができました。
終わりに
ご覧下さりありがとうございました。
次はMySQLとLaravelの環境を構築して、実際の開発環境を進められるように揃えていきます。(記事を書き次第、リンクさせる予定です。)
↓書きました
DockerでLaravelの開発環境を構築する(Laradock)
Appendix
公式系
Docker Hub - PHPオフィシャルリポジトリ
Docker run reference