Dockerを使ってLAMP環境を作ろうと思っているのですが、docker-composeを使った例を持ってくるだけだと自分で理解できないので、ひとつずつ地道にやてみれば理解できるかな、という記録です。
PHPのだけのイメージを取り込んでみる
$ docker run php
とすると、apacheなどが入っていないPHPのみのイメージがダウンロードされコンテナが起動します。
バージョンを指定していないので「php:latest」で最新のバージョンが利用されます。
当然ながらPHPのスクリプトしか実行できないのでブラウザから使えない。
なのでapache付きのイメージを利用することにします。
PHP+apacheのイメージを使ってコンテナを作る
$ docker run php:apache
とすると、php+apacheの最新イメージ「php:apache:latest」が選択され、コンテナが起動します。
が、手元のブラウザから接続する方法がない。
ホスト側(ローカルなマシン)から、コンテナ側のapacheを利用するには、ポートを指定して通路をつくる必要になるわけですね。
そのために、ローカル側8080、コンテナ側80のポートを指定してコンテナを起動することにします。
ローカルのポートは空いていれば何でもいいのですが、コンテナ側が80なのはhttps://hub.docker.com/_/php/のサンプルに従ってます。
apacheのデフォルトが80です。
さらに、ローカルに置いたindex.phpなどのファイルをコンテナ側が読めるようにするために、共通の場所を指定する必要があります。
Apacheがデフォルトで読み込むドキュメントルートは「/var/www/html」なので、ここをローカルのカレントディレクトリと設定します。
これで、ローカル側のカレントディレクトリのファイルをコンテナ側が読めるようになりました。
まとめて指定すると
$ docker run -v $PWD:/var/www/html -p 8080:80 -d php:apache
「-d」オプションは、起動したコンテナが、ターミナルを占領しないで、バックグラウンドで動くための指定。
カレントディレクトリで、
echo "<?php phpinfo(); ?>" > index.php
でindex.phpを作って、ブラウザから「localhost:8080」とすれば、次の画面が表示されます。
***
これにMySQLのコンテナも起動して、ブラウザからPHPを使ってMySQLに接続する予定です。
まだ道は長い。
コメント