Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

コンテナ仮想化ツールDockerをつかったコードによるWebアプリケーション実行環境の構築

インフラ構成管理ツールを使いこなす! コードではじめるサーバ構築 第6回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2015/04/17 14:00

 本連載は、SI業界に入ったばかりの新米業務アプリケーション開発者や、SI業界を目指す学生さんを対象とした、インフラ構成管理ツールを使ってコードでインフラを構築するための講座です。また、インフラエンジニア/システムオペレータで、物理環境でのインフラ構築/運用管理は経験があるけど、プログラミングが苦手という方にも読み進めていただけるように、文法などの解説を入れながら説明します。今回は、Dockerイメージを自動で生成できるDockerfileを使って、コーディングによるWebアプリケーションの実行環境を自動で構築する手順を紹介します。

目次

はじめに

 前回の記事では、仮想環境でアプリケーションを管理/実行するためのオープンソースのソフトであるDockerの概要と、Windows環境へのインストールの手順を紹介しました。今回の記事では、Dockerの実行環境であるコンテナのもととなるDockerイメージを自動で生成できるDockerfileを使って、コーディングによるWebアプリケーションの実行環境を自動で構築する手順を紹介します。

対象読者

 本記事は、次の方を対象にしています。

  • コードを使ってインフラの構成管理がしたい人
  • ネットワークやLinuxの基礎知識がある人
  • Webシステムの開発環境を構築したことがある人

Dockerfileをコーディング

 Dockerfileは、Docker上で動作させる実行環境(コンテナ)の構成情報を記述するためのファイルです。Dockerは、このDockerfileをもとにしてコンテナのもとになる「イメージ」を作成します。

 まずBoot2Dockerのコンソール上で、Dockerfileを作成するための作業用のディレクトリを作成します。

リスト1 作業用ディレクトリの作成
$ mkdir docker-sample
$ cd docker-sample/

 Dockerfileの基本構文は次のようになっています。

リスト2 Dockerの基本構文
命令 引数

 また、#で始まる行はコメント文になっています。命令は大文字でも小文字でもかまいませんが、大文字で統一して書くことをお勧めします。

 今回は、CentOS 6にApache httpdとphpをインストールした簡単なWebアプリケーション実行環境を作成します。

OSイメージの指定

 まず、コンテナ上で実行したいOSのイメージをFROM命令で指定します。このFROM命令は必須項目ですので必ず記述してください。

リスト3 FROM命令の書式
FROM <イメージ>:<タグ名>

 これで、Dockerレジストリから自動的にダウンロードします。たとえば、CentOSのバージョン6を使うときは次のようになります。なおタグ名であるcentos6を省略すると、CentOSの最新版をダウンロードします。

リスト4 CentOSを使う時のFROM命令
FROM centos:centos6

 他のOSやディストリビューションを使いたいときは、docker searchコマントを使います。たとえば、ubuntuのイメージを検索するときは次のようになります。DockerHubに登録されているユーザが作成した独自イメージも検索できます。

リスト4 イメージの検索
$ docker search ubuntu

 なお、必須項目ではありませんが、作成者の情報はMAINTAINER命令に記述します。名前やメールアドレスなどをしておきます。

リスト5 MAINTAINER命令の例
MAINTAINER SHIHO ASA  asashiho@mail.asa.yokohama

ミドルウェアのインストール

 次に、Webアプリケーションサーバで実行するためのミドルウェアなどをインストールします。CentOSでは、Webサーバの構築に必要なミドルウェアやパッケージは、LinuxのRPM互換パッケージ管理システムであるyumレポジトリを使ってインストールしますが、パッケージによっては最新版が導入できないものもあります。今回はPHP 5.5.をインストールするため、rpmコマンドを使ってサードパーティのRemi/EPELレポジトリを導入します。

 Dockerfileでコマンドを実行するには、RUN命令を使います。

リスト5 RUN命令の書式
RUN <実行したいコマンド>

 たとえば、Apache httpdとPHP5.5インストールするには、Dockerfileに次のような命令を記述します。

リスト6 CentOSを使う時のFROM命令
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の格納ディレクトリと同じ場所に用意します。

リスト7 ファイルの配置
/home/docker/docker-sample
   |-- Dockerfile
   |-- index.php

 次に、このindex.phpを配置するためのDockerfileを書きます。Dockerfileでコンテナ内にファイルをコピーするにはADD命令を使います

リスト8 ADD命令の書式
ADD <コピー元ファイル>  <コンテナ内のコピー先ファイル>

 たとえば、ホストのindex.phpをコンテナ内の/var/www/html/index.phpにコピーするときは次のように指定します。

リスト9 Webページの配置の例(Dockerfileの抜粋)
ADD index.php /var/www/html/index.php

 コピー元のファイルは相対パスでも指定できますが、コンテナ内のコピー先ファイルは絶対パスで指定する必要があります。

Apacheサービスの起動

 最後に、Apache httpdのサービスを起動するためのDockerfileを記述します。サービスを起動するときは、CMD命令を使います。

リスト10 CMD命令の書式
CMD ["実行コマンド","パラメータ1", "パラメータ2"]

 Webサーバを起動するため、Apache httpdをフォアグラウンドで実行するためには次のように指定します。

リスト10 CMD命令の書式
CMD ["/usr/sbin/httpd","-D", "FOREGROUND"]

 Dockerfileは、上記以外にも次のような命令があります。

Dockerfileで指定できる命令
命令 説明
FROM OSイメージの指定
MAINTAINER 作成者情報
RUN コマンド実行
CMD コンテナ起動時のコマンド
EXPOSE 通信ポート設定
ENV 環境変数指定
ADD ホストからのファイル/ディレクトリコピー
COPY ファイルのコピー
VOLUME ボリュームのマウント
USER コンテナの実行ユーザ
WORKDIR 作業ディレクトリの指定
ONBUILD ビルドの完了後に実行される命令

 詳しくは以下の公式サイトを参照してください。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 阿佐 志保(アサ シホ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2017年5月時点での登録メンバは52名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂き...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:インフラ構成管理ツールを使いこなす!コードではじめるサーバ構築
All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5