DockerでPHP+Apacheの環境を構築する
仕事で本格的にDockerを触ることになりそうなので、Dockerを勉強しています。
今回はシンプルなPHPとApacheの環境をDockerで構築してみます。
Dockerfileの作成
Docker Hub上からApacheを含むPHPの公式イメージが提供されているので、そちらを使います。
デフォルトではドキュメントルートは/var/www/htmlになります。
# Dockerfile
FROM php:7.2-apache
COPY src/ /var/www/html/
ドキュメントルートを変更したい場合は、APACHE_DOCUMENT_ROOTの環境変数に新しいドキュメントルートのパスを設定することができます。
sedコマンドを使ってapacheのconfファイルのドキュメントルートの設定も書き換える必要があります。
# Dockerfile
FROM php:7.2-apache
ENV APACHE_DOCUMENT_ROOT /var/www/new/html/
COPY src/ /var/www/new/html/
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
コンテナの立ち上げ
Dockerfileからイメージをビルドします。
$ docker build -t my-php-app .
ビルドが終わったらコンテナを立ち上げます。
# コンテナをバックグラウンドで実行し、コンソールにコンテナ ID を表示します
# http://localhost:8000/でブラウザからアクセスできるようになる
$ docker run --publish 8000:80 --detach --name my-running-app my-php-app
コードの即時反映
開発環境として使う場合、ソースを変更すると毎回イメージをビルドし直す必要があり手間が発生します。
コンテナを立ち上げる場合に-vオプションを使うとローカルのソースをコンテナ内にマウントさせることができます。
これを使うことでローカルのコードの即時反映が可能になります。
$ docker run -v /xxxx/src/:/var/www/html --publish 8000:80 --detach --name my-running-app my-php-app
最後に
https://github.com/kanoemon/sandbox-docker/tree/master/php-web-apache
コードはGithubにも載せています。