第9回 Dockerfileで“インフラストラクチャ・アズ・コード”を体験古賀政純の「攻めのITのためのDocker塾」(1/4 ページ)

“攻めのIT”を考える情シスリーダーが今後知っておくべき注目の技術「Docker」を基本から応用まで解説します。今回のテーマは「Dockerfileでインフラストラクチャ・アズ・コードを実体験」です。

» 2015年09月30日 08時00分 公開

Dockerfileでインフラストラクチャ・アズ・コードの一部を体験しよう

 ではDockerfileを書いてインフラストラクチャ・アズ・コードの一部を少しだけ体験してみましょう。

 ここでは、非常に簡単な例として、Apache Webサーバを起動するDockerfileを記述してみます。一般的に、Dockerfileは、Dockerホスト上で作業用のディレクトリを作成し、この作業用ディレクトリ内にDockerfileを記述します。

 以下は、作業用ディレクトリ/root/c66apacheを作成し、その中で、Apache Webサーバー用のDockerfileを記述する様子です。


# mkdir /root/c66apache
# cd /root/c66apache
# 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
EXPOSE 80
ENTRYPOINT ["/usr/sbin/httpd","-DFOREGROUND"]

 いかがでしょうか。これがDockerfileなのですが、これが手順書と言われてもピンと来ないことでしょう。「これって手順書なの? 今までインフラ構築に使っていたスクリプトと何が違うの?」と思われるかもしれません。

 Dockerfileは、単にコマンドの羅列だけで構成されているのではありません。従来のスクリプトの場合は一般的に、条件分岐やループなど様々な状況に対応できるためのロジックを記述します。そのようなプログラミングのロジックが入ると、構築担当者や運用担当者が後から読む際に非常に手間がかかるのです。

 一方、Dockerfileには特有の文法があり、その文法に沿って簡潔に処理手順を記述します。プログラミングのロジックを排除し、構築の手順を順序立てて理解することができるわけです。

 上記のDockerfileを簡単に解説すると、FROM行において、入手元となるDockerイメージを指定しています。ここで重要なのは、OSのインストールメディアのダウンロード手順やインストール手順などを覚える必要がないことです。利用したいOSの種類(ここではcentos、以下同)とバージョン(centos6.6)を指定すればよいのです。今回は、centos:centos6.6を指定していますので、CentOS 6.6ベースのDockerイメージを作成することを意味します。もし、ローカルにcentos:centos6.6のDockerイメージがなければ、自動的にインターネットからイメージを入手する仕組みになっています(すでに入手済みであれば、ダウンロードは行わないようにもなっています)。

 次に、MAINTAINERでは、このDockerfileの管理者を記述しておきます。名前以外にメールアドレスも記述しておくのが慣例となっています。

 ENV行は、環境変数を指定することができます。http_proxyといったプロキシサーバの指定などをここで行うことができます。すなわち、このDockerfileからは、プロキシサーバを利用してDockerイメージが構築されることが分かるわけです。

 前回紹介したウィキサイト構築プロジェクトにおいて、例えば、A社からプロキシサーバの設定が含まれるDockerfileが提供され、顧客のシステムに納品されていること分かったならば、A社がプロキシサーバを利用してDockerイメージの構築が行われ、かつ、顧客のシステムは、プロキシサーバを経由してインターネットにアクセスする可能性があることがこのDockerfileから読み取れるわけです。

 次に、RUN行は、Dockerイメージ作成時に実行されるコマンドを記述します。RUN行で指定したものは、Dockerイメージの作成時に実行されるコマンドであり、Dockerコンテナ起動時に実行されるコマンドではないことに注意してください。RUN行では、yumコマンドによるソフトウェアパッケージの更新やインストールなどを行っています。また、echoコマンドを使ってWebコンテンツtest.htmlを作成しています。

 EXPOSE行では、Dockerコンテナが外部のクライアントに公開するポート番号を指定します。ENTRYPOINTは、docker runによるコンテナ起動時に実行させたいコマンドを記述できます。ここでは、docker run時に「/usr/sbin/httpd -DFOREGROUND」がコンテナで実行されるという意味ですので、docker run時にApache Webサーバのデーモンであるhttpdを起動し、WebサーバのDockerコンテナとして振る舞うことになります。まずは、上記のDockerfileを実際に作成してみて、Dockerfileの文法の雰囲気を少し感じ取って下さい。

       1|2|3|4 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ