第9回 Dockerfileで“インフラストラクチャ・アズ・コード”を体験:古賀政純の「攻めのITのためのDocker塾」(2/4 ページ)
“攻めのIT”を考える情シスリーダーが今後知っておくべき注目の技術「Docker」を基本から応用まで解説します。今回のテーマは「Dockerfileでインフラストラクチャ・アズ・コードを実体験」です。
Dockerfileを使ってDockerイメージを生成
では、この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 .
関連記事
- 【古賀政純の「攻めのITのためのDocker塾」】バックナンバー
- 第2回 chroot/Dockerを手元のWindowsで手軽に試す方法
なぜ企業がDockerに着目するのか、今後の“攻めのIT”に必要と言われているのか。今回はこれをふまえ、簡単にざっくりと体験学習してみませんか。今回は準備編として、CentOS 7.xをお手元のWindows PCで手軽に試す方法を簡単に紹介します。 - ゲームもレースもビッグデータ分析で上手くなる!?
企業の“ビッグデータ活用”への期待度は高い。しかし、現実には「ビッグデータは持っているが活用はできていない」という企業がほとんどだろう。ここでは、思いがけない方法でビッグデータ分析を活用している事例などを紹介する。 - クラウドエバンジェリスト4者対談:「エンタープライズクラウド」は、どこへ向かうのか?
エンタープライズ領域におけるクラウド利用がいよいよ本格的に普及段階に入った。その理由と背景は何か。自社は、導入をどう考えればよいか。主要ベンダーのクラウド関連エバンジェリストに、現状とその未来を分析してもらった。
Copyright © ITmedia, Inc. All Rights Reserved.