ANNAIマガジン
docker
この記事の目次

[追記:2023/06] この記事の執筆当時から現在にかけて、ローカル開発環境の構築方法には大きな変化がありました。Drupal 9/10 向け開発環境の構築については次の記事を参照してください:手軽に本格的な Drupal のローカル開発環境を構築してみよう


この記事は 「Drupal Advent Calendar 2016」 の12月18日分の記事です。

(関連記事:「CMS機能比較 DrupalかWordPressか?- 最適なWebプラットフォームを選択する方法」)

ローカルPC上でDrupalを動作させる方法

大きく以下の3種類になります。

ホストOS上でサービスを起動する

MAMP

MAMP はMAC/Windows OS上で直接動作する Apache(nginx)、MySQL、PHPの環境を構築するためのツールです。GUIのランチャーが用意され、PHPのバージョン切り替えや各種設定の変更などの大部分はGUI上から管理することができるので、あまりターミナルを使いなくない人にとっては非常に良いソリューションになっています。

しかしその反面、「HHVMを使いたい」、「Apache Solrが必要」、「DBにはPostgreSQLを使いたい」など、少し特殊な環境が必要になる場合は、MAMPの機能のみでは実現できない場合があります。

MAMPを使ってDrupal環境を構築する方法については、Studio UMIさんのブログ で詳しく紹介されています。

Drupal Console

ippey_s さんが書かれた Drupal Advent Calendar 2016 8日目の記事: Drupal Consoleを使った開発環境構築 に詳しくまとまっています。

デフォルトではPHPのビルドインサーバーとsqliteが使われるので、apacheやmysqlがなくても動作するのが特徴です。

仮想マシンを使う

仮想マシンを構築する代表的なソフトウェアとしては VirtualBoxVmware があります。

VmwareはMACだと有償版の Vmware Fusion しかなかったり、Windowsで無償で使えるVmware Workstation Playerは商用利用は禁止されていたりしますので、Virtualboxを使っている方が多いのではないでしょうか。

さて、Virtualboxを使うと無料でLinuxの仮想マシンを立ち上げることはできますが、
そこからDrupalのサイトを構築するにはApache,Mysql,PHPなどの各種サービスをインストールして設定する必要があります。Linuxが苦手な方はこのあたりで挫折することが多いようです。

最近は ansiblechefpuppet などの構成管理ツールを使うことで構築作業を自動化することができます。

DruaplVM

DrupalVM は Vagrantとansibleで実装されたDrupalの仮想マシン環境を構築するためのツールです。
コンフィグを変更することで、VarnishApache SolrElastic SearchMemcachedRedis などの周辺ツールもインストールすることができます。使い方については Quick Start Guide を参照してください。

DrupalVMは非常に強力なツールであり、私もしばらく使っていました。
しかし、使い込んでいくと

  • サポートする機能が多いぶん構築(プロビジョニング)に時間がかかる
  • ほとんどのコンポーネントが geerlingguy がgithubの別のレポジトリで公開しているansible roleに依存しているため、バージョンロックが難しい
  • OSのベースイメージ自体がUbuntuやCentOSなどのディストリビューションベンダーの公式イメージではない
  • パッケージを使わずにソースコードからビルドされる場合が結構ある (xdebugなど)
  • 冪等性の考慮があまりされておらず、構築中にエラーが発生すると vagrant provision しても先に進まない場合がある

など色々と気になる点が出てきました。

Yet Another DrupalBox

ということで、自分で使う用に Yet Another DrupalBox を作ってみました。DrupalVMと比べると以下のような特徴があります。

  • VarnishなどのDrupalを動かす上で必須ではないコンポーネントは除外してシンプルに
    • そのうちオプションとして追加できるようにする予定
  • サポートする機能をシンプルにした分、構築時間が短縮され安定してビルドできる
  • 今のところ CentOS 7/Amazon Linux限定
    • Ubuntu LTSのそのうち対応予定
  • Windowsは未サポート
  • HTTPサーバーはnginxのみサポート
  • Vagrantのプロバイダーとして Virtualbox, DigitalOcean, AWS に対応してるので、ローカルだけでなく、クラウド上にもデプロイ可能
    • Azure もそのうち対応予定
  • 冪等性を可能な限り考慮
  • ソースコードからビルドとかはしません、遅いし

ただし、ドキュメントはまだデフォルトの設定で立ち上げる際のREADMEレベルしかありません。。興味がある方は使ってみてください。

コンテナを使う

Docker for MAC/Windows

2016/7/28 に Docker for MAC/Windows がリリースされ、Docker環境は非常に簡単に構築できるようになっています。

昨年リリースされたDocker Toolboxと違い、Docker Engine用のLinux仮想マシンはHyper-VもしくはHypervisor.Framework上で動作するため、Virtualboxが不要になりました。

ただし、Docker for MACについては2016/12月の時点では複数のパフォーマンスの問題があるため、Docker Sync などと併用することをオススメします。

Docker4Drupal

Docker4DrupalWodby が公開しているDrupal用のDocker環境です。

DrupalVMと同様にコンフィグを変更することで、VarnishApache SolrMemcachedRedis などの周辺ツールもインストールすることができます。

PHP、Nginx、Mysqlなどのサービス毎にコンテナが分離されており、非常にメンテナンスや拡張しやすい構成になっています。ドキュメントも充実していますのでぜひ使ってみてください。

Drop Fabrik

Docker4Drupalは非常に便利なのですが、nginxやmariadbがDockerのオフィシャルイメージではなく、wodbyで独自にビルドされたイメージになっています。
また、イメージにタグも打たれていないため、nginxやmariadbのバージョンを簡単に変更することができません(これは、Wodbyのホスティングサービスで使われることを想定しての事だと思います)。

ちなみに、phpのオフィシャルイメージにはDrupalで必要になるgdなどのextensionが含まれていないため、phpのコンテナイメージだけはどうしても独自にビルドが必要になります。

Dockerのオフィシャルイメージは新しいバージョンがほぼリリース当日に公開されますし、バージョンごとにタグも打たれるため非常に便利です。

そのため、phpのコンテナイメージ以外はオフィシャルイメージを使うようにしたDrupal環境を作り、Githubに公開しました。

https://github.com/blauerberg/dropfabrik

以下の様にDrupalのサイトを簡単に立ち上げることができます。こちらは 日本語のドキュメント もありますので、興味がある方は使ってみてください。

$ git clone https://github.com/blauerberg/dropfabrik.git
$ cd dropfabrik/small
$ mkdir -p volumes/drupal
$ curl https://ftp.drupal.org/files/projects/drupal-8.2.4.tar.gz | tar zx --strip=1 -C volumes/drupal
$ docker-compose up -d
$ open http://localhost

まとめ

色々な方法を紹介しましたが、大抵の場合はMAMP Proの有償版を買うのが一番のオススメです。
特殊な環境を作ったり、サーバー周りのチューニングも含めて行う必要がある場合は、仮想マシンかDockerで環境を作るのがいいでしょう。

ただし、VagrantやAnsible、Dockerなどのツールは使う側にもそれなりのリテラシーが要求されますので、
手動でLAMP環境を構築できるレベルのスキルは最低限持っておいた方がいいと思います。
手動でできないことを自動化してもうまくいきませんし、問題が起こっても対応できずに逆に時間を浪費する事にもなりかねません。
ちなみに、私は全ての開発環境をArch Linux + Dockerで構築しています。

MAMPを使う場合のPros and Cons

  • Pros
    • 導入が簡単
    • 有料版だとバーチャルホストが複数使える
    • GUIのランチャーがある
    • 仮想マシンやコンテナーのオーバーヘッドがない
  • Cons
    • 特殊な環境を再現するときはMAMPで完結しない場合がある。HHVM使いたいとか、Solrが必要とか

仮想マシンを使う場合のPros and Cons

  • Pros
    • Virtualboxベースであれば無料で使える
    • プロビジョニングのツールが充実している。Chef, Ansible, Puppet, 人力
  • Cons
    • ゲストOSの起動に時間がかかる
    • 仮想マシンのオーバーヘッドが大きい
    • プロビジョニングに時間がかかる
    • たくさん環境を作ると結構大きなストレージが必要になる

Dockerを使う場合のPros and Cons

  • Pros
    • 複数のサイトでコンテナーのイメージが共有できるため、構築(プロビジョニング)が非常に早い (10秒程度)
    • 起動と終了が非常に早い (5秒程度)
    • コンポーネント単位の差し替えが容易 (phpだけバージョンを変える、nginxをapacheに変えるなど)
    • 仮想マシンよりディスクスペースがかなり節約できる
    • ホストOSがLinuxの場合、オーバーヘッドが非常に少ない
  • Cons
    • 2016/12月の時点ではDocker for MACにパフォーマンスの問題があり、Docker syncなどのツールを併用しないと速度が出ない
 
フッターの採用情報
 
Yoshikazu Aoyamaの写真

この記事を書いた人: Yoshikazu Aoyama

昔は回線交換やL2/L3のプロトコルスタックの開発をしてました。その後、組み込みLinuxやJava/Ruby on RailsなどのWebシステム開発などを経て現職。
インフラからDrupalのモジュール開発、Drupal以外の開発までなんでもやります。
普段は札幌で猫と一緒にリモートワークしています。 好きなモジュールは Restful Web Services と Rules

関連コンテンツ