コンテナ仮想化ツールDockerをつかったコードによるWebアプリケーション実行環境の構築
インフラ構成管理ツールを使いこなす! コードではじめるサーバ構築 第6回
ダウンロード サンプルファイル (865.0 B)
本連載は、SI業界に入ったばかりの新米業務アプリケーション開発者や、SI業界を目指す学生さんを対象とした、インフラ構成管理ツールを使ってコードでインフラを構築するための講座です。また、インフラエンジニア/システムオペレータで、物理環境でのインフラ構築/運用管理は経験があるけど、プログラミングが苦手という方にも読み進めていただけるように、文法などの解説を入れながら説明します。今回は、Dockerイメージを自動で生成できるDockerfileを使って、コーディングによるWebアプリケーションの実行環境を自動で構築する手順を紹介します。
はじめに
前回の記事では、仮想環境でアプリケーションを管理/実行するためのオープンソースのソフトである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 | ビルドの完了後に実行される命令 |
詳しくは以下の公式サイトを参照してください。
この記事は参考になりましたか?
- インフラ構成管理ツールを使いこなす!コードではじめるサーバ構築連載記事一覧
-
- コンテナ仮想化ツールDockerをつかったコードによるWebアプリケーション実行環境の構築
- 業務アプリ開発者のための、コンテナ仮想化ツールDockerをつかったインフラ構築ことはじめ
- インフラを自動で構築! ChefでローカルにWebアプリの開発環境をつくるRubyコードを...
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 阿佐 志保(アサ シホ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
