こんにちは!
MagentoおよびAdobe Commerce(以下まとめてMagento) の環境構築って必要なミドルウェアが多くて準備が大変な上にMagento自体のインストールの手順も結構面倒です。そこで、まだMagentoを使ったことがなくて試してみたい人や、ちょっとした動作確認用にMagento環境を用意したい時などに便利な「Dockerを用いたMagento環境の立ち上げ」について解説してみたいと思います。
使用環境やMagentoバージョン
今回はWindowsのWSL2上で試していきます。下記が整っている前提とします。
※他の環境でもLinuxベースでDockerがインストールされている環境であれば基本的には操作は同じです
- WSL2が有効になっている。
- ディストリビューションインストール済み(今回Ubuntu 20.04を使用しました)
- Docker Desktopがインストールされている。WSL integrationが有効。
- Dockerに少なくとも6GBのRAM割り当てが必要
また今回立ち上げるMagento環境は、Adobe Commerce 2.4.8-p4のオンプレミス版を起動してみます。また、これとは別に少し古い2.4.7も試します。
MagentoのDocker
ちょっと調べてみたところMagentoのDocker環境として用意されているものは主に2系統ありました。
① magento/magento-cloud-docker ・・・Adobe CommerceのCloud環境に近いローカル環境を目的とした公式系ツール
② markshust/docker-magento ・・・ローカル開発を始めやすいコミュニティ製Docker環境
両者の特徴を確認したところ次のような感じ。
- 構築のしやすさ: markshust/docker-magento のほうが一般には楽
- Cloud 本番との構成の近さ: magento-cloud-docker のほうが強い
- 日常的なローカル開発の軽快さ: markshust/docker-magento が有利になりやすい
- Cloud 用の hooks / ece-tools / deploy 流れの検証: magento-cloud-docker が有利
公式ツールのほうが安心なイメージもありますが、用途的にAdobe Commerce on Cloud のローカル再現環境を主眼に置いているものなのでオンプレ用として利用するにはメリットが少なそうなのと構築までのステップも複雑っぽいため、今回は手軽に使えるコミュニティ製Docker環境 のほうを使用します。
コミュニティ製とはいえ、markshust/docker-magento は一般的なMagento開発に広く使用されていて情報も多く、Magento Open SourceだけでなくAdobe Commerce(商用)にもちゃんと対応しているため安心です。
セットアップ
では早速、Dockerを使ってAdobe Commerce 2.4.8-p4を稼働させてみましょう。
markshust/docker-magento は https://github.com/markshust/docker-magento で公開されていますので詳しい内容はそちらのREADMEを参照ください。ここでは簡単な使い方を中心に説明していきます。
Docker環境の構築はWSL2のシェルで作業をしていきます。
# 作業ディレクトリの作成(任意のディレクトリ)
mkdir -p ~/work/ac2.4.8
# ディレクトリ移動
cd ~/work/ac2.4.8
# Docker構築(ワンライナー)
curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/onelinesetup | bash -s -- magento.test enterprise 2.4.8-p4
上記コマンドの最後3つはパラメータで次のような指定をしています。
enterprise ・・・エディション指定(community, enterprise, mageos)
2.4.8-p4 ・・・バージョン(2.4.7, 2.4.8-p4, など)
ホスト名には任意のホスト名を指定でき、構築が完了すると https://magento.test でアクセスできます。
エディションは、Magento Open Source の場合は communityを指定。Adobe Commerce の場合はenterprise を指定します。enterprise はソフトウェアダウンロードでライセンス認証が必要なので事前にAdobe Commerceのアクセスキー(Publicキー、Privateキー )を入手してください。community の場合はライセンス認証は不要です。
実行すると、Magentoの稼働に必要な各種サービスのコンテナが起動し、そのあとMagentoパッケージのダウンロードとインストールが始まります。この時、enterprise ではダウンロードのライセンス認証が聞かれますのでアクセスキーを入力してください。
パッケージダウンロード → インストール → magento setup:install → static content deploy などが実行されて、最後にSSL設定や/etc/hosts にホスト名を追記するため sudoのパスワードを聞かれますのでパスワードを入力してください。
Initialized empty Git repository in /home/ubuntu-user/work/ac2.4.8/.git/
WARN[0000] No services to build
[+] up 13/13
✔ Network ac248_default Created 0.1s
✔ Volume ac248_sockdata Created 0.0s
✔ Volume ac248_ssldata Created 0.0s
✔ Volume ac248_dbdata Created 0.0s
✔ Volume ac248_rabbitmqdata Created 0.0s
✔ Volume ac248_appdata Created 0.0s
✔ Container ac248-rabbitmq-1 Healthy 8.5s
✔ Container ac248-mailcatcher-1 Created 0.2s
✔ Container ac248-db-1 Healthy 6.5s
✔ Container ac248-opensearch-1 Healthy 16.5s
✔ Container ac248-redis-1 Healthy 6.0s
✔ Container ac248-phpfpm-1 Created 0.1s
✔ Container ac248-app-1 Created 0.1s
Composer authentication required (repo.magento.com public and private keys):
Username: ※アクセスキー(Public key)を入力
Password: ※アクセスキー(Private key)を入力
Composer auth has been set up.
Fixing filesystem ownerships...
Filesystem ownerships fixed.
Creating a "magento/project-enterprise-edition=2.4.8-p4" project at "./"
Installing magento/project-enterprise-edition (2.4.8-p4)
- Downloading magento/project-enterprise-edition (2.4.8-p4)
~中略~ パッケージダウンロードとインストールがされます
Setting basic URL and generating SSL certificate...
Your system password is needed to add an entry to /etc/hosts...
[sudo] password for ubuntu-user: ※sudoのパスワードを入力
~中略~ コンテナの再起動、Magentoキャッシュクリアなどが行われます。
Docker development environment setup complete.
You may now access your Magento instance at https://magento.test/
You may now access your Magento backend instance at https://magento.test/admin/
Use the following default credentials to log in:
Username:
Password:
# 以上でセットアップ完了
ひとまずMagentoのDocker環境のセットアップは完了です。驚くほど簡単ですね。
あとはWindowsのhostsファイルに下記の名前解決を追記するとブラウザでアクセスが可能となります。
ストアフロント https://magento.test/
管理画面 https://magento.test/admin/
管理画面のデフォルトのユーザーとパスワードには下記が設定されています。
※マニュアルでも公開されているデフォルトのログイン情報ですので公開サーバーには使用しないように注意してください
パスワード: password123
ログインしようとすると二段階認証の設定を求められますが、次のいずれかで対応出来ます。
方法① 二段階認証を設定する(正規ルート)
方法② 二段階認証モジュールを無効化する(手軽)
方法③ bin/initでサンプルデータをインストールする ★おすすめ
①は送られてくるメールを確認し、二段階認証を設定する正規の方法です。メールを受け取るための方法としてMailcatcherというものがコンテナで起動しており http://magento.test:1080 にアクセスするとMagentoから送らたメールをブラウザで確認することが出来ます。そこから指示通りに操作して二段階認証を設定します。
②はbin/magento module:disable で二段階認証モジュールを無効にする方法です。次の手順で無効にできます。
# モジュールの無効化
bin/magento module:disable Magento_AdminAdobeImsTwoFactorAuth Magento_TwoFactorAuth
# アップグレードでモジュール変更を反映
bin/magento setup:upgrade
# Magentoキャッシュクリア
bin/magento cache:flush
③は、次のステップ「サンプルデータのインストール」で説明するbin/initの実行です。これを行うと二段階認証も無効化がされます。環境にサンプルデータ も入れるのであればこの方法が一番楽です。
サンプルデータのインストール
セットアップ完了後はまだ何も登録がされていないので、サンプルデータをインストールしてみます。
markshust/docker-magento には、binディレクトリに様々な便利なコマンドが収録されています。サンプルデータのインストールは下記のコマンドでインストール可能です。
bin/init
しかし!実行しようとするとエラーになりました。
-bash: bin/init: Permission denied
bin/initを確認すると実行権限が付与されていませんでしたので、chmodで付与してから実行します。
※本来セットアップ後に実行権限が付与されているのが正しい状態と思いますがなぜ付与されていないのかは不明です。
chmod +x bin/init
bin/init
>>> Deploying Magento sample data...
~中略~サンプルデータのパッケージがインストールされます
>>> Magento development environment initialized successfully! 🎉
マニュアルではこれでサンプルデータがインストールされることになっていますが、実はこのままではまだインストールされていません。サンプルデータのモジュールが有効になっていないためです。(これも本来は有効になって正常にインストールがされるものと思いますが理由は不明)
手動でモジュールを有効化してアップグレードとキャッシュクリアなどを実行します。
先ほど触れたbinディレクトリには、magentoコマンドを実行するための代用コマンドが用意されています。普通ならDockerのコンテナ phpfpmのシェルに入ってmagento コマンドを実行する必要があるところ、そうしなくても普通にbin/magentoコマンドを叩いて実行できるようになっているため、結構便利です。
以下についても引き続きWSL2上でコマンド実行で行います。(コンテナ内ではなく)
# モジュールを有効化(便宜上 --all で全モジュールを指定していますが、個別に指定しても構いません)
bin/magento module:enable --all
~中略~ サンプルモジュールが有効化されます
To make sure that the enabled modules are properly registered, run 'setup:upgrade'.
Cache cleared successfully.
Generated classes cleared successfully. Please run the 'setup:di:compile' command to generate classes.
Info: Some modules might require static view files to be cleared. To do this, run 'module:enable' with the --clear-static-content option to clear them.
# Magentoアップグレードを実行
bin/magento setup:upgrade
~中略~ Magentoにモジュールが反映されます
# (動作モードがdeveloperモードなので、setup:di:compileとsetup:static-content:deployは割愛)
# Magentoキャッシュクリア
bin/magento cache:flush
~中略~ キャッシュクリアされます
# インデックス再構築
bin/magento indexer:reindex
~中略~ インデックスが再構築されます
ここまで実行するとMagentoにサンプルデータが反映 されます。
先ほどのストアフロントをリロードするとサンプルが反映されています。

管理画面側もサンプルの商品データ等が確認できます。

その他の便利コマンド
他にも便利なコマンドがいくつか 用意されています。
Dockerコンテナを操作するコマンド
bin/start ・・・すべてのコンテナを起動(ヘルパーが含まれているのでdocker-compose up -dの代わりにこちらの使用をお勧めします)
bin/stop ・・・すべてのコンテナを停止
bin/removeall ・・・コンテナ、ネットワーク、ボリューム、イメージをすべて削除します(先にbin/stopallを実行してください)
MySQLに接続するコマンド
bin/mysql ・・・mysql cliでDBに接続します(接続情報にはenv/db.envが参照されるのでコマンドのみで接続可能です)
bin/mysqldump ・・・同じくmysqldump コマンドです。
Bashコマンド
bin/bash ・・・phpfpmコンテナのbashプロンプトに入ります。
Composerコマンド
bin/composer ・・・コンテナ内のcomposerを実行します。
他にも色々なコマンドが用意されています。詳細はREADME参照
PhpMyAdminも入っている
実はPhpMyAdminもコンテナで起動しています。http://localhost:8080 でアクセス可能です。
※ユーザーとパスワードはenv/db.envに記載されているものと同じです。
Docker環境の起動と停止
Docker環境の停止は bin/stop コマンドで停止できます。作業が終わったら停止しておきましょう。
再び起動する場合は、bin/start で起動できます。
Docker環境を削除したい場合
Docker環境が不要になったら下記の手順で削除できます。
# コンテナの停止(bin/stopでも良いですがマニュアルではbin/stopallを使用するように書かれています)
bin/stopall
# すべてのコンテナ、ネットワーク、ボリューム、イメージを削除
bin/removeall
# ディレクトリの削除
cd ~
rm -rf ~/work/ac2.4.8
セットアップがうまくいかないとき
よく直面するエラーで次のようなものがあります。
プロジェクトディレクトリが空ではないため、インストールに失敗
インストール中に何らかの失敗をした後など、前回実行でディレクトリにファイルが残っていると発生するエラーです。このようなときは一度全て削除してからやり直すのが近道です。
(「Docker環境を削除したい場合」の手順で削除してやり直します)
サービスのバージョンが合わない
筆者が少し古いバージョンのAdobe Commerce 2.4.7環境をセットアップしようとしたとき、コンテナのmariadbのバージョンが合わずmagentoのインストールに失敗する場面がありました。こうした場合はcompose.yamlに記述されたコンテナのサービスのバージョンを調整するなどの対応が必要になります。
エラーの例。mariadbは10.2-10.6でなければなりませんがコンテナは11.4が起動しています。
In SqlVersionProvider.php line 103:
Current version of RDBMS is not supported. Used Version: 11.4.9-MariaDB-ubu
2404. Supported versions: MySQL-8, MySQL-5.7, MariaDB-(10.2-10.6)
compose.yaml を変更する場合は、ワンライナーのセットアップ手順では出来ないので、一部手動のステップを踏みます。(一度全て削除してやり直してください)
Adobe Commerce 2.4.7-p2のセットアップを例にします。
# 作業ディレクトリの作成(任意のディレクトリ)
mkdir -p ~/work/ac2.4.7
# ディレクトリ移動
cd ~/work/ac2.4.7
# Docker構築テンプレートのダウンロード
curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/template | bash
vi等で compose.yaml のmariadbのバージョンを変更します。
db:
# image: mariadb:11.4
image: mariadb:10.6
command:
--max_allowed_packet=64M
続いて、Magentoのダウンロードとセットアップを実行します。(ワンライナーのときはこれが自動で行われています)
# Magentoのダウンロード
bin/download enterprise 2.4.7-p2
~中略~ パッケージダウンロードが行われます
# セットアップ
bin/setup magento.test
~中略~ Magentoのセットアップが行われます
これ以降はワンライナーと同じです。
まとめ
いかがでしたでしょうか。説明は少し長くなりましたが、実行するステップ自体は非常に少なく簡単にDockerでMagento環境を構築することが出来ます。
本格的な開発では本番環境に合わせた内容で用意する必要があったりするのでこう簡単には行きませんが、検証環境などを楽に用意したい場合の手法としては便利ではないでしょうか。

