CLOVER🍀

That was when it all began.

Ubuntu Linuxコンテナをベースに、Apache 2用のDockerイメージを作る

今度は、自分で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