CodeZine(コードジン)

特集ページ一覧

GUIでコンテナ仮想化ツールDockerをつかう「Kitematic」のご紹介

目指せ、定時退社! スマートなエンジニアのためのお役立ちツール(7)

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

Dockerを使ったPHPアプリケーションの開発例

 Dockerのインストールが完了したので、次は具体的にPHPによるWebアプリケーションの開発の例について説明します。

Webアプリ開発におこりがちなトラブル

 PHPに限らず、大規模なWebアプリケーション開発では、デザイナ・フロントエンジニア・サーバサイドエンジニアなどが分業で並行開発を行うことが多くなっています。

 そのため、Webアプリケーション開発者であれば

「私のパソコン上だと正しく動いているのですが……」

「こちらのサーバでは動きますが、別のサーバにデプロイするとエラーが出ます。」

などのトラブルに悩まされる人も多いのではないかと思います。

インフラ環境の差異でおこる問題
インフラ環境の差異でおこる問題

 これらの原因は、OSネットワークミドルウエアの設定やバージョン、アプリケーションが利用するライブラリの有無やバージョン差異など、インフラ環境の不整合によって生じている場合がほとんどです。

 Dockerは、コンテナ仮想化技術を用いて、これらアプリケーションを実行させるために必要なインフラ環境とアプリケーションの実行モジュールを「Dockerイメージ」にまとめてパッケージングします。Dockerでは、このパッケージングしたDockerイメージをもとにコンテナを動作させます。Dockerイメージは、どの環境でも同じように動作します。

Dockerを使ったイメージ
Dockerを使ったイメージ

Dockerと貨物コンテナ

 貨物輸送で利用されるコンテナは、野菜であろうが、穀物であろうが、資材であろうが、車であろうが、積み込まれている荷物の中身を意識せず、どこにでもコンテナ船で輸送できることで、流通のしくみに大きな変革をもたらしました。Dockerも、開発用のパソコンからオンプレミスの本番環境のサーバ、さらにはクラウド上の仮想サーバにいたるまで、どこでもアプリケーションを実行させることができるため、アプリケーションの開発のしかたを大きく変える可能性があります。アプリケーションの開発のしかたが変わるということは、つまりエンジニアの働き方も大きく変わってくる可能性があります。

Dockerコンテナの起動とアプリケーション開発

 それでは、具体的にPHPによるWebアプリケーション開発のためのDockerイメージを作成します。Kitematicの画面で[NEW]ボタンをクリックし、検索ボックスに「docker-kitematic」と入力しイメージを検索します。

 イメージは、次の命名規則で名前が付けられています。

ユーザ名/イメージ名

 ここでは、「asashiho」というユーザが作成した「docker-kitematic」という名前のイメージを選択し、[CREATE]ボタンをクリックします。

PHP開発用イメージの検索
PHP開発用イメージの検索

 コンテナが起動すると、次のような画面になります。

PHP開発用のイメージ
PHP開発用のイメージ

 PHPのアプリケーションはパソコン上の以下のフォルダに配置します。

C:\Users\<ユーザ名>\Documents\Kitematic\docker-kitematic\var\www\html

 今回は、動作確認のため、以下の内容のindex.htmlをhtmlフォルダに配置します。

リスト1 index.php
<?php
    phpinfo();
?>
PHPアプリケーションの動作確認
PHPアプリケーションの動作確認

 クライアントPCにアプリケーションサーバやPHPをインストールすることなくアプリケーション開発を行うことができます。バージョン差異やライブラリの有無も気にすることなく、プログラムをフォルダに配置するだけで開発やテストをすすめることができます。

Dockerイメージの作りかた

 それでは、このWebアプリケーションの実行環境のもとになるDockerイメージを作成してみます。残念ながら、執筆時のKitematicは、DockerイメージをGUIから作成できないため、コマンドラインからの操作になります。

 まず、Dockerイメージを作成するもとになるDockerfileを作成します。このDockerfileはDockerイメージのインフラ構成情報(OSの種類やバージョン/ミドルウエアの構成/ネットワーク/デーモンプロセスの起動)をテキストファイルで記述したものになります。

 このDockerfileを、パソコン上の任意のフォルダ内に作成します。筆者の環境では、Eドライブ配下にdocker-phpというフォルダを作成し、その中にDockerfileという名前のテキストファイルを作成しています。なお、Dockerfile中の#はコメント行です。

 Dockerfileを次のように記述します。

リスト2 PHPのWebアプリケーション実行環境をつくるDockerfile
# 1.ベースイメージの取得
FROM centos:latest

# 2.作成者情報
MAINTAINER 0.1 asashiho@mail.asa.yokohama

# 3.Apache HTTP ServerとPHPのインストール
RUN ["yum", "-y", "install", "epel-release"]
RUN ["rpm", "-ivh", "http://rpms.famillecollet.com/enterprise/remi-release-7.rpm"]
RUN ["yum", "-y", "install", "httpd"]
RUN ["yum", "-y", "install", "--enablerepo=remi-php56", "php", "php-mbstring", "php-pear"]

# 4.Webコンテンツの配置
VOLUME ["/var/www/html"]

# 5.ポートの解放
EXPOSE 80

# 6.httpdの実行
CMD ["/usr/sbin/httpd","-D", "FOREGROUND"]

 このDockerfileでは、CentOSの最新バージョンにApache Httpd ServerとPHPをインストールし、Webコンテンツを配置するディレクトリ/var/www/htmlを割り当てています。またHTTP通信を行うため、80番ポートを解放し、httpdデーモンをコンテナのプロセスとして起動するよう設定しています。他の設定やライブラリなどを行うときは、このDockerfileを修正します。Dockerfileの命令の詳細については、以下の連載を参照して下さい。

 Dockerfileをビルドすることで、Dockerイメージを作成できます。Kitematicの場合、画面左下の[DOCKER CLI]ボタンをクリックします。すると、Powershellが起動します。

CLIの起動
CLIの起動

 Dockerfileを格納したディレクトリに移動し、次のコマンドを実行します。これで作成したDockerfileをもとに「docker-php」という名前のDockerイメージが生成されます。

リスト3 Dockerイメージのビルド
PS E:\docker-php> docker build -t docker-php .
Powershell上でのコマンド実行
Powershell上でのコマンド実行

 これで、ローカルのパソコン内にDockerイメージが生成できました。これを開発チーム内で共有できるようDocker Hubにアップロードします。Docker Hubにアップロードするためには、Dockerイメージにタグをつける必要があります。たとえばdocker-phpという名前のイメージに対して、Docker Hubユーザ名がasashihoでイメージ名がdocker-php(最新版:latest)というタグをつけるときは次のコマンドを実行します。なお、ユーザ名はDocker Hub登録時の名前に読み替えてください。

リスト4 Dockerイメージへのタグ設定
PS E:\docker-php> docker tag docker-php asashiho/docker-php:latest

 イメージにタグが設定できたら、Docker Hubにログインしてイメージをアップロードします。

リスト5 Dockerイメージのアップロード
PS E:\docker-php> docker login -u <ユーザ名> -p <パスワード> -e <Eメール>

PS E:\docker-php> docker push <ユーザ名>/docker-php:latest

 これで、Docker Hubへのアップロードが完了しました。Kitematicから検索するとイメージが生成されているのが分かります。

生成したDockerイメージの確認
生成したDockerイメージの確認

 チームでWebアプリケーション開発を行っている場合は、Dockerイメージをチーム内で共有して開発を進めれば、インフラ環境が起因でおこるトラブルを減らすことができます。

 なお、Kitematicは、現在α版のリリースであり、機能もまだ揃っていません。そのため、コマンドラインでの操作が必要な部分もありますが、Dockerの開発スピードは非常に早く、すべての操作をGUIから出来るようになるのも、時間の問題だと考えています。

おわりに

 今回の記事では、話題のDockerをGUIで操作できる「Docker Kitematic」を簡単に紹介しました。Kitematicを使えば、インフラ構築やコマンド操作に不慣れなデザイナや開発者の負荷を減らし、本業のWebデザインやコーディングに注力できます。筆者はDockerの魅力の一つは「簡単である」ことだと考えています。とりあえず、Docker使ってみました! という人が増えるといいなと思っています。



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

バックナンバー

連載:目指せ、定時退社! スマートなエンジニアのためのお役立ちツール

著者プロフィール

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

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

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

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

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5