2015.03.09

Docker Composeでfuelphp開発環境構築


こんにちは、次世代システム研究室のN.O.です。前回に引き続き、今回は実践ということでコミットステージにおける開発環境をDockerで構築します。先日リリースされたDocker Composeを使って開発環境を構築したいと思います。

Docker Composeとは


Docker Composeは複数のコンテナ起動を簡単に行う事のできるツールです。今風に言うとオーケストレーションしてくれます。ymlファイルにコンテナの定義しておき、それに従ってコマンド一つでコンテナ群が起動できます。操作できる範囲は単体のDockerホスト内のみとなりますが、小規模なコンテナ群、特に開発環境向けではないかと考え今回のデモで採用しました。
以前はFigという名前で公開されていました。

メリット

メリットを以下に挙げます。まだ利用実績が無いので実際のプロジェクトで使用できるかは未知数です。
  • VMに比べ起動が早い
  • Dockerはプロセスを実行する形でコンテナを起動しますので、VMに比べ高速です。
  • 開発マシンのリソースを節約できる
  • VMはboot2docker用のDockerホスト1台で済みますので、vagrantで複数VMを起動するといった構成よりは動作が軽くなります。

前提

シナリオとしてfuelphpで簡単なサンプルアプリケーションを作成し、Dockerで構築したLAMP環境にデプロイします。

ローカル開発環境

  • OSX
  • boot2docker v1.5.0
  • docker-compose 1.1.0

Docker image

今回はDockerのimageは公式のlibraryを利用しますが、プロジェクトの要件に合わせてカスタマイズすることも可能です。この例でもphpライブラリを多少カスタマイズするため、Dockerfileを用意してbuildを行っています。

手順


新規のレポジトリを作成します

curl get.fuelphp.com/oil | sh

mkdir fuelphptutorial
cd fuelphptutorial
oil create demo_app
cd demo_app
vim fuel/app/config/config.php
  'default_timezone'   => 'Asia/Tokyo',
oil refine install
php composer.phar update

コミットします

rm -rf .git
git init
git status
git add .
git commit -m "Initial commit"

Dockerfileを作成します

FROM php:5.6-apache

# install mysql driver for php
RUN docker-php-ext-install pdo pdo_mysql
# enable rewrite
RUN cd /etc/apache2/mods-enabled && ln -s ../mods-available/rewrite.load 

WORKDIR /var/www
RUN rm -r /var/www/html && ln -s /var/www/demo_app/public /var/www/html

docker-compose.ymlを作成します

db:
  image: mysql
  environment:
   - MYSQL_ROOT_PASSWORD=mysecretpassword
   - MYSQL_DATABASE=fuel_intro
web:
  build: Dockerfile/fuelphp-apache
  links:
   - db
  ports:
   - "3000:80"
  volumes:
   - .:/var/www/demo_app

dockerコンテナを作成します

# DBを起動します
docker-compose up -d db
# webサーバ用のイメージをbuildします
docker-compose build
# DBの定義をDBに反映します
docker-compose run web php demo_app/oil refine migrate:current
# webサーバを起動します
docker-compose up -d web

動作確認します

boot2dockerのIPアドレスを確認し、http://[boot2dockerのIPアドレス]:3000ポートにアクセスし、動作を確認します。
boot2docker ip

次回


今回は開発環境の構築までDockerで行いました。次回はテスト環境、リリースへ向けて環境を整備していきたいと思います。




次世代システム研究室では、グループ全体のインテグレーションを支援してくれるアーキテクトを募集しています。インフラ設計、構築経験者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。

皆さんのご応募をお待ちしています。