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/drupalDrupalのソースコードをダウンロードして展開します。
# 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/drupalmacOSを使っている場合、パフォーマンスの問題 を回避するために docker-sync を利用することを強く推奨します。 Use docker-sync を参照してください。
コンテナーを生成して起動します。
$ docker-compose up -dホストマシンがLinuxの場合は、ディレクトリの権限を修正する必要があります。
$ docker-compose exec php chown -R www-data:www-data /var/www/html/sites/defaultDrupalにアクセスします。
$ 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/bashDrushはphpコンテナーにインストールされています。
$ docker-compose exec php drush stgzipで圧縮された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 を参照してください。