Magento2をDockerで動かすには?【docker-compose編】
この記事は公開から 1年以上が経過しています。現在の最新情報との整合性については弊社では一切の責任を負いかねます。
このエントリは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開発を進めてみてはいかがでしょうか!