はじめに
Dockerコンテナを複数起動し、ネットワーク設定など必要な環境構築を行うための、Compose
を学びます。
YAMLファイルにCompose
の設定を記述し、実行することでコマンド一発で環境構築ができるようになります。
目的
docker-composeを使って仮想環境にDrupalを構築をする
今回は、下記の操作を行います。
-
docker-compose.yml
をファイルを自作する -
docker compose
でDrupal環境を構築する - DBにはpostgresを使用する
上記の操作を行いながら、仮想環境でDrupalとDBが動くようネットワークを構築します。
※ちなみに、DrupalはCMSの一種です。WordPressみたいな。
環境
- macOS Mojave 10.14.6
- Docker engine 19.03.5
YAMLファイルを作る
docker-compose
コマンドを使用するためには、その設定ファイルともいうべきYAMLファイルが必要になります。
早速作っていきます。
基本的なYAMLファイルの文法については、公式ドキュメントに詳しい説明がありますので、必要な時には都度参照していきます。
docker-compose.yml
の作成
今回はdrupal-docker
というディレクトリで作業を進めていきます。
まずはdocker-compose.yml
というファイル名で、.ymlファイルを作成します。
ファイル名はこの通りでなくても作成できますが、その場合docker compose
コマンドを実行する際にファイル名を指定する必要があります。いちいちファイル名を指定するのは面倒なので、特別な理由がなければこのデフォルト名でファイルを作成します。
YAMLのバージョン指定
yamlファイルにはバージョンがあります。
バージョンによって使える機能が違うのですが、今回はバージョン2を使用します。
version: '2'
services
の指定
services
に使用するイメージや設定を書き込みます。
version: '2'
services:
drupal: # サービス名
image: drupal
Docker-Composeでは、アプリケーションを動かすための各要素をServiceと読んでいます。
でもまあ、ざっくりいうとコンテナです。
ここでは、Drupalの公式イメージから、コンテナを作りますよーと設定している感じ。
ports
の指定
起動させたDrupalコンテナは、Apacheで動いていて、ポートを指定してアクセスを待ち受けます。
こうした内容は、DockerHubのDrupal公式リポジトリをみて確認することができます。
どのポートがデフォルトで使用されるのかに関しても、同様にDockerHubで確認して記述しましょう。
DockerHubの公式イメージにはCompose用のサンプルが書いてあることが多いので、必要な設定を確認することが大切です。
version: '2'
services:
drupal: # サービス名
image: drupal
ports:
- "8080:80"
データベース
の指定
今回はDrupalで使用するDBとしてPostgresを使用します。
Drupalと同じくServices
に記述します。
DBは同一ネットワークにあるDrupalコンテナからのみアクセスするため、ports
の指定は必要ありません。
DBにはパスワードの設定が必要なので、environment
の記述が必要です。
version: '2'
services:
drupal: # サービス名
image: drupal
ports:
- "8080:80"
postgres: # サービス名
image: postgres
environment:
- POSTGRES_PASSWORD=mypasswd
Volumes
の指定
さて、DrupalとDBの指定ができたのですが、どのようにこのボリュームをマウントすれば良いでしょうか。
それもDurupalイメージの公式ドキュメントに書いてありますので、そこからコピペします。
version: '2'
services:
drupal: # サービス名
image: drupal
ports:
- "8080:80"
volumes: # 名前指定付き
- drupal-modules:/var/www/html/modules
- drupal-profiles:/var/www/html/profiles
- drupal-sites:/var/www/html/sites
- drupal-themes:/var/www/html/themes
postgres: # サービス名
image: postgres
environment:
- POSTGRES_PASSWORD=mypasswd
# Volumeの定義
volumes:
drupal-modules:
drupal-profiles:
drupal-sites:
drupal-themes:
Drupalに必要な4つのボリュームを名前付きで指定しました。
それに合わせて、Volumeの定義もファイルの下部で行っています。
docker-compose up
YAMLの準備が整ったので、実行しましょう。
下記のコマンドを実行すると、コンテナが複数立ち上がり自動でdrupal環境が構築されます。
docker-compose up
localhost:8080
をブラウザで開くことで、Drupalの初期画面が表示されました!
ちなみに、docker-compose down
を実行することで、upしたコンテナやそのネットワークを一度に削除することができます。
Drupalの初期設定(注意)
このままDrupalの初期設定をする際に少し注意があります。
今、この環境はコンテナネットワークの仮想環境にある、ということです。
どういうことでしょうか。初期設定を進めていきます。
データベース名は設定した名前、ユーザー名はDockerHubにデフォルトユーザー名がpostgres
だと書いてあります。
パスワードはyamlファイルで指定したものです。
この状態だとエラーになります。
ホストを「localhost」から「postgres」に変更することで、正常にインストールを進めることができます。
この「postgress」はサービス名であり、コンテナを使う時に重要なDNSの役割を果たしています。
この「postgress」というサービス名は、DockerのDNSによってDockerネットワークのIPに解決されDrupalに渡されます。
反対に、localhostはDBのあるネットワークではないので、localhostを指定するとエラーになってしまうというわけです。
まとめ
インストールが完了し、無事ホーム画面が表示されました!