Drupal をひとまず試したいのであれば PHP 製ウェブアプリなので XAMPP を用いるなどでもよいのですが、Docker が入っている場合は Docker でサクッと環境を作成することができます。
以下にて Drupal の公式イメージが配布されているのでとにかく起動させてみたいのであれば、公式の説明通りのコマンドを叩けばとりあえずブラウザで確認することができます。
docker run --name some-drupal -p 8080:80 -d drupal
ただこれだと、コンテナを削除すると全てのデータが消えてしまうので Dockerfile
のカスタマイズと docker-compose
を用いた永続化の例を紹介します。
Dockerfile でベースイメージのカスタマイズ
FROM drupal:latest
# Drushインストール
RUN composer global require drush/drush \
&& ln -s /root/.composer/vendor/bin/drush /usr/local/bin/drush \
&& drush --version
CMD ["apache2-foreground"]
上記のは公式イメージから Drupal をコマンドラインで操作するためのツール Drush を composer を用いてインストールしています。
なお、composer コマンドはベースイメージでインストールしているので特にインストール作業も無しにコマンドを用いて別途パッケージを追加することができます。
最後に CMD ["apache2-foreground"]
で Apache を起動しています。
docker-compose.yml で永続化設定
Docker 公式の Drupal イメージには DB サーバーがインストールされていないので、組み込み DB の SQLite を用いて CMS のセットアップをしてしまうか、別途 DB サーバーを担うコンテナを建てる必要があります。
今回は docker-compose を利用して DB (今回は mariadb)サーバーを立ち上げて接続するようにしつつ、各種リソースを永続化するように設定します。
version: '3.7'
services:
mysql:
image: mariadb
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
volumes:
- data:/var/lib/mysql
- ./dump:/docker-entrypoint-initdb.d
environment:
MYSQL_ROOT_PASSWORD: "password" # 任意で変更してください
MYSQL_DATABASE: "drupal" # 任意で変更してください
ports:
- "3306:3306"
drupal:
build: ./
volumes:
- ./web/themes:/var/www/html/themes
- ./web/modules:/var/www/html/modules
- ./web/sites:/var/www/html/sites
- ./config:/opt/drupal/config
- ./composer.json:/opt/drupal/composer.json
- ./composer.lock:/opt/drupal/composer.lock
ports:
- "80:80"
depends_on:
- mysql
volumes:
data: {}
いくつか特筆すべき箇所をピックアップします。
services.mysql.command
はDBの文字コードをデフォルトのラテン系から、日本語などマルチバイト文字を利用する場合に必要な設定となります。
services.drupal.depends_on
で drupal コンテナから mysql コンテナにアクセスできるようにしています。
また、Docker でコンテナを立ち上げる際にマウントはホストからコンテナ方向の単一のため、予めホスト側にコンテナの資材を用意しておく必要があります。
そのために、適当なコンテナを立ち上げて tar コマンドなりでホスト側に資材を持ってくる必要があります。
以下は公式イメージのページにかかれているコマンドをほぼそのまま引用していますが、docker cp
コマンドでもホストに資材を持ってくることが可能です。
$ mkdir -p ./web/{themes/,modules/,sites/}
$ docker run --rm drupal tar -cC /var/www/html/themes . | tar -xC ./web/themes
$ docker run --rm drupal tar -cC /var/www/html/modules . | tar -xC ./web/modules
$ docker run --rm drupal tar -cC /var/www/html/sites . | tar -xC ./web/sites
$ docker run --rm drupal cat /opt/drupal/composer.json > ./composer.json
$ docker run --rm drupal cat /opt/drupal/composer.lock > ./composer.lock
あとは docker-compose.yml
を起動すれば http://localhost
で Drupal のインストール画面へ遷移します。
$ docker-compose up
次回は中規模以上のサイトでよくあるケースに Drupal がそもそも対応しているのか、そのあたりの検証、知見の共有をできればと思います。