わたしが使っている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
【Docker】php7.1+php-fpm+alpine3.4を構築(PHP OFFICIAL REPOSITORY利用) – IT石ログ
【Docker】alpine3.7+php7.1+php-fpm+nginxを構築(alpine OFFICIAL REPOSITORY利用) – IT石ログ