Docker

DockerでPHP7.1とApacheの環境を構築

 

わたしが使っているDockerはMacで動作させています。

現在はApache x PHP7.1で開発を行っていて、Dockerを使ってこの環境をいかに早く簡単に構築できるのかを説明します。

ApacheやPHPの設定変更まで行います。

最後は作ったイメージやコンテナを削除します。

PHP7.1とApacheを起動する

PHP7.1xApache起動

$ docker run -d -p 80:80 --name php71-apache php:7.1-apache

ローカルにphp:7.1-apacheのイメージがない場合は、自動でDocker Hubから取得してくれます。

-pオプションでポートを80番でフォワードします。

–nameオプションでコンテナの名前はphp71-apacheとしました。

コンテナが起動しているかを確認

$ docker container ls

 

コンテナにログイン

$ docker container exec -ti php71-apache bash

 

Apacheホームディレクトリをホストとコンテナ間でディレクトリ同期する

コンテナを停止

$ docker container stop php71-apache

コンテナを削除

$ docker container rm php71-apache

ローカルディレクトリ/Users/ishimoto/docker/php71-apache/wwwと、コンテナ/var/www/htmlと同期

$ docker run -d -p 80:80 -v /Users/ishimoto/docker/php71-apache/www:/var/www/html --name php71-apache php:7.1-apache

/Users/ishimoto/docker/php71-apache/wwwディレクトリで以下を実行しブラウザでlocalhostにアクセスします。

$ echo '<?php phpinfo();' > index.php

するとphpinfoが表示されます。

Apacheを設定変更する

Apache設定ファイルをコンテナからローカルにコピーする

container idを確認する

$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESb9558f5abc38 php:7.1-apache "docker-php-entrypoi…" About an hour ago Up About an hour 0.0.0.0:80->80/tcp php71-apache

container idは「b9558f5abc38」となります。

コンテナからローカルにコピー

$ docker cp b9558f5abc38:/etc/apache2/apache2.conf /Users/ishimoto/docker/php71-apache

 

Apache設定ファイルをローカルからコンテナにコピーする

ローカルからコンテナにコピー

$ docker cp /Users/ishimoto/docker/php71-apache/apache2.conf b9558f5abc38:/etc/apache2/apache2.conf

ファイルがコピーされていることが確認できます。

コンテナを保存する

$ docker commit php71-apache

 

コンテナを停止・起動して、変更内容が残っていることを確認する

コンテナ停止

$ docker stop php71-apache

コンテナ停止確認

$ docker ps

コンテナ起動

$ docker start php71-apache

 

Apacheを設定変更したオリジナルのコンテナイメージを作成する

レシピ「Dockerfile」を作成します

わたしは、/Users/ishimoto/docker/php71-apache/Dockerfileを作成しました。

同じディレクトリに変更した、apache2.confファイルを用意しておきます。

Dockerfileの中身です。

FROM php:7.1-apache
COPY ./apache2.conf /etc/apache2/apache2.conf

 

イメージファイル「my-httpd」を作成します

$ cd /Users/ishimoto/docker/php71-apache
$ docker build -t my-httpd .

最後のピリオドも忘れずつけておいてください。カレントディレクトリのDockerfileを利用するという意味になります。

イメージが作成されたことを確認する

$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
my-httpd latest ecac6d45ea14 10 minutes ago 392MB

作成されたイメージでコンテナを起動する

$ docker run -d -p 80:80 my-httpd

起動されたことを確認します。

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES36a062643031 my-httpd "docker-php-entrypoi…" 27 seconds ago Up 30 seconds 0.0.0.0:80->80/tcp romantic_dubinsky

変更されたapache2.confで起動していることを確認します。

$ docker container exec -ti 36a062643031 bash

root@36a062643031:/var/www/html# tail /etc/apache2/apache2.conf

いらなくなったコンテナを削除する

コンテナはcommitするとどんどん増えていくので、いらなくなったコンテナは削除する必要があります。

コンテナの一覧を表示

$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES36a062643031 my-httpd "docker-php-entrypoi…" 15 hours ago Exited (0) 15 hours ago romantic_dubinskyb9558f5abc38 php:7.1-apache "docker-php-entrypoi…" 18 hours ago Exited (0) 16 hours ago php71-apache

 

コンテナの削除

$ docker rm [CONTAINER ID]

 

コンテナが削除されたかの確認

$ docker ps -a

 

いらなくなったイメージを削除する

イメージが不要になると削除することができます。

※コンテナが残っている状態でイメージを削除しようとするとメッセージが表示されます。(Error response from daemon: conflict: unable to delete 9a0138c02438 (cannot be forced) – image has dependent child images)

イメージの一覧を表示

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZEmy-httpd latest ecac6d45ea14 16 hours ago 392MBphp 7.1-apache 9307bdae03eb 7 days ago 392MB

 

イメージの削除

$ docker rmi [IMAGE ID]

 

削除できたのかを確認

$ docker images

 

スポンサーリンク