このエントリはMagento Advent Calendar 2018の15日目です。

前回の続きで、今回は複数のDockerコンテナをまとめて簡単に管理ができるdocker-composeの、設定ファイルについて説明してみたいと思います。


docker-compose.yml

docker-composeはDocker本体とは別にインストールする必要があります。詳細はdocker-compose公式ドキュメントを参考にしてください。

インストールが完了すればdocker-compose.ymlを作成します。
このファイルの中にはコンテナに使用するイメージの指定やボリュームのマウント位置、ポートフォワードなど起動時の設定を以下のようにまとめておくことが出来ます。
※YAMLはインデントにタブを使えないので注意してください。

version: "3"
services:
  apache:
    build: .
    image: magento:apache
    container_name: magento-apache
    volumes:
      - ./magento2:/var/www/html
    networks:
      magento:
        ipv4_address: 192.168.10.2
    ports:
      - "80:80"
    depends_on:
      - "mysql"
  mysql:
    image: mysql:5.7
    container_name: magento-mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_USER: magento
      MYSQL_PASSWORD: password
      MYSQL_DATABASE: magento2
    volumes:
      - magento-mysql:/var/lib/mysql
    networks:
      magento:
        ipv4_address: 192.168.10.3
volumes:
  magento-mysql:
networks:
  magento:
    ipam:
      config:
        - subnet: 192.168.10.1/29

1行目でdocker-compose.ymlファイルのバージョンを指定します。今回は3を指定しました。


Apacheコンテナ用の設定

3行目以下にApache用の設定を書いていきます。
4行目では前回作成したDockerfileの場所を指定しています。上の例ではdocker-compose.ymlと同じディレクトリに設置しています。
5行目ではイメージを指定しています。buildと同時に使用するとイメージをビルドした際にイメージ名を自動的に付けてくれます。
6行目では起動したコンテナの名前を指定しています。どのコンテナかひと目でわかる名前にするといいでしょう。
7,8行目はボリュームのマウントを指定しています。docker run時の-vオプションと同様です。上の例ではdocker-compose.ymlのあるディレクトリにmagento2というディレクトリを作成し、その中にMagento本体を設置しています。
9~11行目はコンテナに割り振るIPアドレスを指定しています。後ほど(31行目以降)設定するCIDRアドレスの範囲に含まれるものを指定しましょう。
12,13行目はポートフォワードの設定です。docker run時の-pオプションと同様です。
14,15行目はコンテナ起動時の依存関係を指定しています。上の例のように書けば、mysqlコンテナが起動した後にapacheコンテナが起動します。


MySQLコンテナ用の設定

MySQLに関してもApacheと同様に書いていきます。上の例ではDocker公式イメージのmysql:5.7を使用しています。
19~23行目はコンテナ内で使用する環境変数を指定しています。公式MySQLイメージではrootパスワードなどを環境変数で指定できるよう(いい感じに)作られています。詳細は公式MySQLイメージのREADMEで確認してください。上の例ではmagentoユーザーを作成し、rootとmagentoのパスワードをpasswordにし、magento2データベースを作成しています。
24,25行目もApacheと同様にボリュームの指定ですが、こちらではMySQLのデータを永続化させるための設定になっています。上の例ではmagento-mysqlというボリュームを/var/lib/mysqlにマウントすることで永続化させています。


その他の設定

29,30行目はMySQLコンテナで使用したボリュームを作成しています。
31~35行目は前述したとおり、コンテナが所属するネットワークの設定です。上の例ではmagentoというネットワークを作成し、その範囲を192.168.10.1/29に指定しています。


起動と終了

docker-compose.ymlが完成したら起動してみましょう。
ファイルのあるディレクトリに移動してdocker-compose up -dで立ち上がるはずです。
-dオプションでバックグラウンド起動をさせることが出来ます。

Magentoのインストールウィザードが表示されましたか?

今回は前回と違いMySQLコンテナも立ち上がってますので、インストールを完了することができるはずです。

コンテナを停止したい場合はdocker-compose stop、再起動したい場合はdocker-compose restart、(停止中のコンテナを)削除したい場合はdocker-compose rmなど、様々なコマンドが用意されています。

以上でdocker-compose編は終了です。
前後編に渡ってDockerでMagentoを動かす方法について説明してきましたが、これでようやく入門レベルです。Dockerfileもdocker-compose.ymlも設定次第でとても複雑なことも出来ます。
弊社内ではDocker公式イメージではなくUbuntuイメージをカスタムして、ApacheやMySQLだけでなくVarnishやElasticsearchのイメージも作成して使用しています。
Dockerを使うメリットとしては、様々な環境で差異が出にくいこと、バージョンを簡単に入れ替えられること、起動が早いことなど沢山あります。
この記事をきっかけに是非、Dockerを活用したMagento開発を進めてみてはいかがでしょうか!