Drop FabrikはDrupalの開発環境を素早く立ち上げるためのDocker環境です。 5分から10分程度でDrupalの環境をDocker上に構築することができます。
(面倒なので)「使う際にビルドしない」をコンセプトにしています。 そのため、基本的にofficial imageをそのまま使い、ボリューム経由で設定ファイルのみを差し替える形で Drupalの稼働に必要な環境を作っています。
以下のコンテナーイメージで構成されています。
Container | Service name | Image | Exposed port |
---|---|---|---|
Nginx Proxy | nginx-proxy | jwilder/nginx-proxy | 80 |
Nginx | web | nginx | |
MariaDB | db | mariadb | 3306 |
PHP-FPM 5.6 / 7.0 / 7.1 | php | blauerberg/drupal-php | |
mailhog | mailhog | mailhog/mailhog | 8025 (HTTP server) |
phpmyadmin | phpmyadmin | phpmyadmin/phpmyadmin | 8080 (HTTP server) |
dozzle | dozzle | amir20/dozzle | 8081 (HTTP server) |
- macOS Sierra上で動作するDocker for MACの最新版
- Windows 10上で動作するDocker for Windowsの最新版
- Linux上で動作するDocker engineの最新版
- Docker for Windowsを使う場合は、 共有ドライブ を有効にしてください。
初めにレポジトリをクローンします。
$ git clone https://github.com/blauerberg/dropfabrik.git
$ cd dropfabrik
次にDrupalのソースコードをマウントするためのディレクトリを作成します。
デフォルトの設定では、ホストマシンの volumes/drupal
をコンテナーのデータボリュームとしてマウントします。
$ mkdir -p volumes/drupal
Drupalのソースコードをダウンロードして展開します。
# Note: replace "X.Y.Z" in below to Drupal's version you'd like to use.
$ curl https://ftp.drupal.org/files/projects/drupal-X.Y.Z.tar.gz | tar zx --strip=1 -C volumes/drupal
macOSを使っている場合、パフォーマンスの問題 を回避するために docker-sync を利用することを強く推奨します。 Use docker-sync を参照してください。
コンテナーを生成して起動します。
$ docker-compose up -d
ホストマシンがLinuxの場合は、ディレクトリの権限を修正する必要があります。
$ docker-compose exec php chown -R www-data:www-data /var/www/html/sites/default
Drupalにアクセスします。
$ open http://localhost # もしくはブラウザで http://localhost へアクセス
データベースの認証情報は docker-compose.override.yml
で設定されています。
デフォルト値は以下になります。
- Database Name:
drupal
- Username:
drupal
- Password:
drupal
詳細については https://hub.docker.com/_/mariadb/ の "Environment Variables" を参照してください。
Dropfabrikではnginx、mariadb、php-fpmは全て別々のコンテナーで動作します。
そのため、インストール時にデータベースサーバーのホスト名に localhost
ではなく db
を指定する必要があります。
ブラウザからウィザードでインストールする代わりに、以下のようにDrushを使ってインストールすることもできます。
$ docker-compose exec php drush -y --root="/var/www/html" site-install standard --site-name="Drupal on Docker" --account-name="drupal" --account-pass="drupal" --db-url="mysql://drupal:drupal@db/drupal" --locale=ja
# Drupal 8の場合は以下も実行
$ docker-compose exec php drush -y config-set system.theme admin bartik
$ docker-compose stop
Dropfabrikにはコンテナ内のログをブラウザ上で表示するためにDozzleが組み込まれています。 http://localhost:8081 にアクセスしてコンテナ内で何が起こっているのが確認してみましょう。周りにサポートしてくれるエンジニアがいる場合、Dozzleのログをそのまま見せるのは良い方法です。
デフォルトでは localhost
でのみwebサーバーにアクセスできるようになっています。
他の名前でアクセスしたい場合は、docker-compose.override.yml
を開き、 VIRTUAL_HOST
の値を変更してください。
また、hosts ファイルを編集し、127.0.0.1
で VIRTUAL_HOST
で指定したホスト名が解決できるようにしてください。
docker-compose.yml
を編集し、使いたいPHPのバージョンに対応したイメージを使うように変更してください。
Drupal.orgで配布されているアーカイブをそのまま利用する場合は、ルートディレクトリがそのままDrupalのソースコードの最上位ディレクトリになりますが、
drupal-composer/drupal-project でDrupalのプロジェクトを管理している場合は、 web
ディレクトリ以下がDrupalのソースコードとなります。
そのため、drupal-composer/drupal-projectで管理されているコードを利用する場合はwebサーバーのドキュメントルートを変更する必要があります。
docker-compose.override.yml
を編集し、web
サービスのボリュームで nginx/default.conf
の代わりに nginx/default_for_drupal_composer.conf
をマウントするように変更してください。
drushなどで秘密鍵を使うケースを考慮し、 docker-compose.override.yml
に php
イメージにホストOS側の秘密鍵をマウントするサンプルを用意しています。
ホストOSがlinuxとMacOSの場合はこの方法で問題ありませんが、ホストOSがWindowsの場合、ホスト側のファイルシステムの問題 で秘密鍵のパーミッションが正しく設定されません。
この問題のワークアラウンドとして、 php/php-fpm/id_rsa
に秘密鍵をコピーし docker-compose build
すると秘密鍵入りのカスタムイメージをビルドすることができます。
sshではなく docker-compose exec
を使いましょう。
$ docker-compose exec {Service name} /bin/bash
# ex. docker-compose exec php /bin/bash
Drushはphp
コンテナーにインストールされています。
$ docker-compose exec php drush st
gzipで圧縮されたSQLのダンプファイルを initdb.sql.gz
という名前で配置し、docker-compose.override.yml
の以下の行のコメントアウトを解除してください。
コンテナの生成時に一度だけこのファイルがロードされ、データベースが復元されます。
- ./initdb.sql.gz:/docker-entrypoint-initdb.d/initdb.sql.gz
Drush経由で接続する:
$ docker-compose exec php drush sqlc
データベースコンテナは 127.0.0.1上でport 3306をlistenします。そのため、MysqlWorkbench や Sequel Pro のようなホストOS上で動作するGUIアプリケーションからコンテナー内のデータベースに接続することができます。
また、 http://localhost:8080
にアクセスすると phpmyadmin を利用してデータベースにアクセスすることもできます。
macOSを使っている場合、パフォーマンスの問題 を回避するために docker-sync を利用することを強く推奨します。インストール方法は docker-sync.io を参照してください。
docker-syncを使う場合は docker-compose.override-for-docker-sync.yml
を docker-compose.override.yml
としてコピーしてください。
また、docker-compose
の代わりに docker-sync-stack
でイメージを起動する必要があります。
$ docker-sync-stack start
詳細は https://github.com/EugenMayer/docker-sync/wiki を参照してください。