はじめに
前回の記事では、仮想環境でアプリケーションを管理/実行するためのオープンソースのソフトであるDockerの概要と、Windows環境へのインストールの手順を紹介しました。今回の記事では、Dockerの実行環境であるコンテナのもととなるDockerイメージを自動で生成できるDockerfileを使って、コーディングによるWebアプリケーションの実行環境を自動で構築する手順を紹介します。
対象読者
本記事は、次の方を対象にしています。
- コードを使ってインフラの構成管理がしたい人
- ネットワークやLinuxの基礎知識がある人
- Webシステムの開発環境を構築したことがある人
Dockerfileをコーディング
Dockerfileは、Docker上で動作させる実行環境(コンテナ)の構成情報を記述するためのファイルです。Dockerは、このDockerfileをもとにしてコンテナのもとになる「イメージ」を作成します。
まずBoot2Dockerのコンソール上で、Dockerfileを作成するための作業用のディレクトリを作成します。
$ mkdir docker-sample $ cd docker-sample/
Dockerfileの基本構文は次のようになっています。
命令 引数
また、#で始まる行はコメント文になっています。命令は大文字でも小文字でもかまいませんが、大文字で統一して書くことをお勧めします。
今回は、CentOS 6にApache httpdとphpをインストールした簡単なWebアプリケーション実行環境を作成します。
OSイメージの指定
まず、コンテナ上で実行したいOSのイメージをFROM命令で指定します。このFROM命令は必須項目ですので必ず記述してください。
FROM <イメージ>:<タグ名>
これで、Dockerレジストリから自動的にダウンロードします。たとえば、CentOSのバージョン6を使うときは次のようになります。なおタグ名であるcentos6を省略すると、CentOSの最新版をダウンロードします。
FROM centos:centos6
他のOSやディストリビューションを使いたいときは、docker searchコマントを使います。たとえば、ubuntuのイメージを検索するときは次のようになります。DockerHubに登録されているユーザが作成した独自イメージも検索できます。
$ docker search ubuntu
なお、必須項目ではありませんが、作成者の情報はMAINTAINER命令に記述します。名前やメールアドレスなどをしておきます。
MAINTAINER SHIHO ASA asashiho@mail.asa.yokohama
ミドルウェアのインストール
次に、Webアプリケーションサーバで実行するためのミドルウェアなどをインストールします。CentOSでは、Webサーバの構築に必要なミドルウェアやパッケージは、LinuxのRPM互換パッケージ管理システムであるyumレポジトリを使ってインストールしますが、パッケージによっては最新版が導入できないものもあります。今回はPHP 5.5.をインストールするため、rpmコマンドを使ってサードパーティのRemi/EPELレポジトリを導入します。
Dockerfileでコマンドを実行するには、RUN命令を使います。
RUN <実行したいコマンド>
たとえば、Apache httpdとPHP5.5インストールするには、Dockerfileに次のような命令を記述します。
RUN rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm RUN rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm RUN yum -y install httpd RUN yum -y install --enablerepo=remi-php55 php php-mbstring php-pear
PHP本体に加えて、日本語などマルチバイト文字を使うモジュールであるphp-mbstringやPHPのパッケージライブラリ集であるphp-pearも併せてインストールしています。
Webページの配置
Webサーバに、作成したHTMLなどのコンテンツを配置します。今回は、PHPの動作確認をするために、<?php phpinfo(); ?>のみがコーディングされたindex.phpをDockerfileの格納ディレクトリと同じ場所に用意します。
/home/docker/docker-sample |-- Dockerfile |-- index.php
次に、このindex.phpを配置するためのDockerfileを書きます。Dockerfileでコンテナ内にファイルをコピーするにはADD命令を使います
ADD <コピー元ファイル> <コンテナ内のコピー先ファイル>
たとえば、ホストのindex.phpをコンテナ内の/var/www/html/index.phpにコピーするときは次のように指定します。
ADD index.php /var/www/html/index.php
コピー元のファイルは相対パスでも指定できますが、コンテナ内のコピー先ファイルは絶対パスで指定する必要があります。
Apacheサービスの起動
最後に、Apache httpdのサービスを起動するためのDockerfileを記述します。サービスを起動するときは、CMD命令を使います。
CMD ["実行コマンド","パラメータ1", "パラメータ2"]
Webサーバを起動するため、Apache httpdをフォアグラウンドで実行するためには次のように指定します。
CMD ["/usr/sbin/httpd","-D", "FOREGROUND"]
Dockerfileは、上記以外にも次のような命令があります。
命令 | 説明 |
---|---|
FROM | OSイメージの指定 |
MAINTAINER | 作成者情報 |
RUN | コマンド実行 |
CMD | コンテナ起動時のコマンド |
EXPOSE | 通信ポート設定 |
ENV | 環境変数指定 |
ADD | ホストからのファイル/ディレクトリコピー |
COPY | ファイルのコピー |
VOLUME | ボリュームのマウント |
USER | コンテナの実行ユーザ |
WORKDIR | 作業ディレクトリの指定 |
ONBUILD | ビルドの完了後に実行される命令 |
詳しくは以下の公式サイトを参照してください。