SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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


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

 本連載は、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 ビルドの完了後に実行される命令

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

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
Dockerイメージを作る

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
インフラ構成管理ツールを使いこなす!コードではじめるサーバ構築連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8606 2015/06/15 13:57

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング