では、このDockerfileを使ってDockerイメージを生成してみましょう。今回のDockerfileでは、インターネットに接続されている必要があります。また、インターネットへの接続にプロキシサーバを利用していない場合は、上記のDockerfile中のhttp_proxyとhttps_proxyの設定の2行は不要ですので削除してください。今回作成するDockerイメージの名前は「c66apache0002」とします。Dockerfileが存在する作業用の/root/c66apacheディレクトリで、以下のように入力します。
# docker build -t centos:c66apache0002 .
これでApache Webサーバ入りのDockerイメージc66apache0002が生成されました。簡単にオプションを解説しておくと、docker buildでDockerイメージをビルドするという意味になります。-tオプションは、Dockerイメージに付与するタグです。生成するDockerイメージの名前と思って差し支えありません。最後のドット「.」は、このディレクトリに存在するDockerfileをロードし、ビルドを行うためのディレクトリパスの設定です。Dockerイメージが作成されているかをホストOS上で確認してみましょう。
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos c66apache0002 f69ee32d2ffe 4 minutes ago 232.6 MB centos centos6.6 8b44529354f3 4 months ago 202.6 MB
Dockerイメージcentos:centos6.6がCentOS 6.6のOSイメージ、centos:c66apacehe0002が今ビルドしたApache Webサーバ入りのDockerイメージです。他の開発者や構築担当者は、このDockerイメージを再利用することで、すぐにWebサーバを構築・利用することができます。Apache Webサーバー入りのDockerコンテナweb0001を起動させてみましょう。
# docker run -i -t -d --name web0001 centos:c66apache0002
ホストOSから、docker execにより、起動したDockerコンテナweb0001のIPアドレスを調べ、curlコマンドでWebコンテンツtest.htmlにアクセスできるか確認してください。
# docker exec -i -t web0001 ip a |grep inet inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host inet 172.17.0.23/16 scope global eth0 inet6 fe80::42:acff:fe11:9/64 scope link # curl http://172.17.0.23/test.html Hello Apache.
先述のDockerfileが完成し、無事Webサーバ入りのDockerコンテナが起動できました。続いて、別のDockerイメージをビルドしてみましょう。Dockerfileが含まれる作業用ディレクトリ/root/c66apacheを別の名前でコピーしておきます。
# cp -a /root/c66apache /root/c66apache02
新しく作った作業ディレクトリ/root/c66apache02で、Dockerfileを以下のように編集します。
先程のDockerfileに、「RUN echo "Hello Docker." >> /var/www/html/test.html」を追加します。ただし、それ以外の行は、一切編集しないで下さい。追加する行以外で、スペースを入れることや、タブを入れるなどの編集もしないでください。
# cd /root/c66apache02 # vi Dockerfile FROM centos:centos6.6 MAINTAINER Masazumi Koga ENV container docker ENV http_proxy http://proxy.your.site.com:8080 ENV https_proxy http://proxy.your.site.com:8080 RUN yum update -y && yum clean all RUN yum install -y httpd && yum clean all RUN echo "Hello Apache." > /var/www/html/test.html RUN echo "Hello Docker." >> /var/www/html/test.html EXPOSE 80 ENTRYPOINT ["/usr/sbin/httpd","-DFOREGROUND"]
Dockerfileを作成したら、Dockerイメージ「centos:c66apache0003」をビルドしてみます。
# docker build -t centos:c66apache0003 . ...
今度は、先程と比べて非常に短い時間でビルドされたと思います。Dockerfileでは、既存のDockerイメージのキャッシュを使って、編集が行われた行以降が実行されるようになっているため、ビルド時間を大幅に短縮できるのです。逆に、既存のDockerイメージのキャッシュを使わずに、Dockerfileのはじめからビルドしたいという場合は、以下のように、--no-cache=trueを付与してください。
# docker build -t centos:c66apache0003 --no-cache=true .
Copyright © ITmedia, Inc. All Rights Reserved.