1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

さわっておぼえるDocker入門🐳#6(自作.ymlでDrupal環境をcomposeする)

Last updated at Posted at 2020-04-22

はじめに

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を使用します。

docker-compose.yml
version: '2'

servicesの指定

servicesに使用するイメージや設定を書き込みます。

docker-compose.yml
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イメージの公式ドキュメントに書いてありますので、そこからコピペします。

スクリーンショット 2020-04-22 22.21.05.png

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の初期画面が表示されました!

スクリーンショット 2020-04-22 22.44.49.png

ちなみに、docker-compose downを実行することで、upしたコンテナやそのネットワークを一度に削除することができます。

Drupalの初期設定(注意)

このままDrupalの初期設定をする際に少し注意があります。
今、この環境はコンテナネットワークの仮想環境にある、ということです。

どういうことでしょうか。初期設定を進めていきます。

データベース名は設定した名前、ユーザー名はDockerHubにデフォルトユーザー名がpostgresだと書いてあります。

パスワードはyamlファイルで指定したものです。

スクリーンショット 2020-04-22 22.47.41.png

この状態だとエラーになります。

ホストを「localhost」から「postgres」に変更することで、正常にインストールを進めることができます。
この「postgress」はサービス名であり、コンテナを使う時に重要なDNSの役割を果たしています。
この「postgress」というサービス名は、DockerのDNSによってDockerネットワークのIPに解決されDrupalに渡されます。

反対に、localhostはDBのあるネットワークではないので、localhostを指定するとエラーになってしまうというわけです。

まとめ

インストールが完了し、無事ホーム画面が表示されました!

スクリーンショット 2020-04-22 22.58.42.png

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?