今年も Magento2 on Docker がアップデートいたしました!
kzkick2nd/magento2-on-docker: Magento2 docker-compose kit
Magento2 コンテナを研究してもはや4年、カズキック2です。
私の2019年は Meet Magento Japan にてついに Magento2 on GKE のノウハウを発表するなど、ようやくコンテナホスティングが可能な Magento2 コンテナの糸口がつかめてまいりました。
インフラ界に目をやると、CNDF による Kubernetes の標準化とそれに伴い、マネージドコンテナホスティング、通称 CaaS、KaaS が台頭し、デプロイチェーンにおいてコンテナを中心に各インフラサービスに横串を通す状況となってきました。もはやコンテナは Vagrant を置き換える開発用途ではなく、インフラの標準言語となったと感じています。
これに伴い、Magento2 on Docker という名前での提供も一段落がついたと思いますので、2019年版をもって"on Docker"としての更新は終了いたします。
本記事では Magento2 on Docker 最後のβバージョン、2019 で新しくなった点を紹介したいと思います。
マルチステージ対応
Magento2 は初期化時点で400MB程度の容量を使う大きなアプリケーションです。ビルド時の巨大さが以前より問題になっていたので、マルチステージビルドで容量を削減しました。といっても1.5GBから1G程度への削減ですが、頻繁なビルドにおいてはこの差が効いてきます。より軽量な Alpine イメージであればさらに軽量化できる余地もありますが、複雑な Dockerfile となるためメンテナンス性を重視して php-apache-buster イメージを利用しています。
ローカル同期をやめた
Magento2 のファイル容量が多いことで、2018 版以前では Docker for Mac の泣き所であるローカル同期の遅さをもろに食らっていました。ホスティング前提のイメージにすること、また通常の開発では Magento2 標準ファイルを編集することはバッドプラクティスであることから、2019 版からイメージで完結し、必要な際に Docker Compose の Volume mount を差し込む形としました。
サンプルで標準出力ロガーを app/code 以下にマウントしていますので、それを参考に必要な場所にディレクトリを同期してください。
標準出力ロガーを同梱
コンテナホスティングではログは標準出力に出すことが標準仕様となっています。これに対応するため Magento2 デフォルトロガーを上書きして標準出力するサンプルモジュールを同梱しています。サンプルでは di.xml によるクラス上書き設定と、 monolog の出力先をファイルではなく標準出力にしてあるだけですので、必要に応じてログフォーマット等を変更してください。
ディレクトリを /var/www/magento/ に変更
公式 PHP Apache イメージでは /var/www/html は root ユーザーによる起動しか許可しておらず、これは Kuberenetes でホスティングした際のプロセス実行ユーザーにも影響します。ホスティング時のセキュリティの観点から、この root 縛りを外すため /var/www/magento/ ディレクトリにて apache 仮想ホストによる起動を行っています。
起動の仕方は README を参照ください。動作不良の報告、PR はいつでも受け付けていますので、お気軽にご連絡ください。