今度は、自分でDockerfileを書いて、Dockerイメージを作成してみます。
ベースとなるDockerイメージは、Ubuntu Linux 14.04.2とします。
ubuntu
https://registry.hub.docker.com/_/ubuntu/
最初はうまくDocker内でApacheが立ち上げられなくて、その時はここを参考にして回避しました。
Invalid Mutex directory in argument file:/var/lock/apache2
http://log.axcoto.com/article/164442852
Dockerfileを書く
というわけで、まずはDockerfileを書いてみます。適当なディレクトリ配下で、こんな感じで作成。
Dockerfile
FROM ubuntu:14.04.2 RUN apt-get install -y apache2 EXPOSE 80 ADD run-apache2.sh /run-apache2.sh RUN chmod a+x /run-apache2.sh CMD /run-apache2.sh
Apache起動時のコマンドがちょっと長かったので、別スクリプトにしました。ADDを試す良い機会になりました…。
run-apache2.sh
. /etc/apache2/envvars [ ! -d ${APACHE_RUN_DIR:-/var/run/apache2} ] && mkdir -p ${APACHE_RUN_DIR:-/var/run/apache2} [ ! -d ${APACHE_LOCK_DIR:-/var/lock/apache2} ] && mkdir ${APACHE_RUN_USER:-www-data} ${APACHE_LOCK_DIR:-/var/lock/apache2} /usr/sbin/apache2 -D FOREGROUND
Dockerコンテナって、通常Daemonとなるプロセスでもフォアグランドで実行するようにしないと、すぐにコンテナが終了しちゃうんですね。覚えておきましょう…。
参考)
Dockerfile reference
https://docs.docker.com/reference/builder/
Dockerfileとdocker buildコマンドでDockerイメージの作成 (1/2)
http://www.atmarkit.co.jp/ait/articles/1407/08/news031.html
Dockerfileとdocker buildコマンドでDockerイメージの作成 (2/2)
http://www.atmarkit.co.jp/ait/articles/1407/08/news031_2.html
Dockerイメージをビルドする
作成したDockerfileから、Dockerイメージをビルドします。
$ docker build -t kazuhira/apache2:latest .
特にエラーなく終了すれば、Dockerイメージの作成は完了です。
Successfully built 252742893e57
「docker images」で確認してみます。
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE kazuhira/apache2 latest 252742893e57 44 seconds ago 202.7 MB ubuntu 14.04.2 6d4946999d4f 2 weeks ago 188.3 MB
…ちょっとでかい?
Dockerコンテナを起動する
それでは、Dockerコンテナを起動してみます。ホスト側からも80ポートが見えるようにしました。
$ docker run -p 80:80 -d kazuhira/apache2:latest dab1ef91192670a625b311cfb795cc7d55e3f857fbf95252940d551c76350fd2
ホスト側からもcurlなどで確認できます。
$ curl http://localhost/
うまく起動しなかったら?
「docker logs <コンテナID>」で、起動時の標準出力ログが見れるらしいです。Apacheが起動しなかった時、だいぶお世話になりました…。
$ docker logs dab1ef911926