これは Craft CMS Advent Calendar 2020 25日目の記事です。
去る12月16日に Apple Silicon 搭載の Mac に対応した Tech Preview of Docker Desktop for M1
が公開されました。正直「来年、少しでも早い時期にβ版が出ればいいな」くらいに思っていたので、嬉しい誤算です。
Download and Try the Tech Preview of Docker Desktop for M1 - Docker Blog
https://www.docker.com/blog/download-and-try-the-tech-preview-of-docker-desktop-for-m1/
早速試してみたところ、自分の使用範囲では問題なさそう。。。
ということで、利用にあたって必要となる設定ファイルのカスタマイズ方法について、備忘録を兼ねてまとめてみます。
はじめに
前提として、過去記事「ローカル環境を Docker で構築してみた」の手順で Craft CMS 向けのローカル環境がすでに用意されているものとします。基本的にはコンテナのベースとなるイメージを切り替えるだけですので、そこを読み替えていただけばご自身の環境でも同様に調整できると思います。
なお、Docker Desktop for M1 はテクニカルプレビュー版です。
ここで紹介する内容の如何を問わず、実際に試される場合はすべて自己責任で行ってください。
特にマウントするボリュームなどは、事前にバックアップしておくことを強くオススメします。(試行錯誤中に何度か壊したので... w)
リバースプロキシの調整
はじめに Nginx のリバースプロキシに関する設定を見直します。
ファイルの準備
ベースにしている Nginx のリバースプロキシで最低限必要なファイル構成は、次の通りです。(※コンテナ起動後に自動生成される証明書などのファイルを除いています。)
webproxy
├── .env
├── data/
│ └── conf.d/
│ ├── realip.conf
│ ├── servertokens.conf
│ └── uploadsize.conf
├── docker-compose.yml
└── nginx.tmpl
このプロジェクト直下に arm64-webproxy
ディレクトリを作成し、上記のファイルやディレクトリをすべてコピーします。
webproxy
├── .env
├── arm64-webproxy/
│ ├── .env
│ ├── data/
│ │ └── conf.d/
│ │ ├── realip.conf
│ │ ├── servertokens.conf
│ │ └── uploadsize.conf
│ ├── docker-compose.yml
│ └── nginx.tmpl
├── data/
│ └── conf.d/
│ ├── realip.conf
│ ├── servertokens.conf
│ └── uploadsize.conf
├── docker-compose.yml
└── nginx.tmpl
コピー後はこのようなファイル構成になります。
docker-compose.yml の修正
次に arm64-webproxy/docker-compose.yml
を2箇所修正します。
変更前 | 変更後 |
---|---|
image: nginx:stable-alpine | image: arm64v8/nginx |
image: jwilder/docker-gen | image: intrepidde/arm64-docker-gen |
いずれも ARM 64ビットアーキテクチャ向けのイメージに切り替える形です。
コンテナの起動
M1 Mac でコンテナを起動するときだけ arm64-webproxy
ディレクトリへ移動後にコマンドを実行します。
$ cd arm64-webproxy
$ docker-composer up -d --build
これで Intel Mac / M1 Mac のどちらからでも、起動できるようになりました。
Craft 3 向け LAMP 環境の調整
ファイルの準備
arm64-craft3
ディレクトリを用意し、.env
、docker/apache/Dockerfile
、docker-compose.yml
をコピーします。ベースにしているリポジトリに必要なデータをコミットしてありますので、そちらも参考にしてください。
Docker 関連のファイルを抜き出すと、以下のような構成になります。
craft3docker
├── .env
├── arm64-craft3/
│ ├── .env
│ ├── docker/
│ │ └── apache/
│ │ └── Dockerfile
│ └── docker-compose.yml
├── docker/
│ ├── apache/
│ │ └── Dockerfile
│ └── config/
│ ├── 000-default.conf
│ ├── my.cnf
│ └── php.ini
└── docker-compose.yml
.env の修正
次に arm64-craft3/.env
を2箇所修正します。
変更前 | 変更後 |
---|---|
DB_PATH=./db | DB_PATH=./../db |
APACHE_BASE_PATH=./htdocs | APACHE_BASE_PATH=./../htdocs |
これは既存のマウントボリュームを共用するための調整です。Intel Mac / M1 Mac それぞれで DB を独立させたければ、元のパスのままでも問題ありません。
Dockerfile の修正
arm64-craft3/docker/apache/Dockerfile
では、先頭行に記述しているイメージを変更します。
変更前 | 変更後 |
---|---|
FROM php:7.4-apache | FROM arm64v8/php:7.4-apache |
別なイメージを利用する際も、オフィシャルイメージである arm64v8 から探すとよさそうです。
docker-compose.yml の修正
最後に arm64-craft3/docker-compose.yml
を4箇所修正します。
変更前 | 変更後 |
---|---|
image: mysql:5.7 | image: biarms/mysql:5.7 |
- ./docker/config/my.cnf:/etc/mysql/mysql.conf.d/my.cnf:cached | - ./../docker/config/my.cnf:/etc/mysql/mysql.conf.d/my.cnf:cached |
- ./docker/config/php.ini:/usr/local/etc/php/conf.d/user-php.ini:cached | - ./../docker/config/php.ini:/usr/local/etc/php/conf.d/user-php.ini:cached |
- ./docker/config/000-default.conf:/etc/apache2/sites-available/000-default.conf:cached | - ./../docker/config/000-default.conf:/etc/apache2/sites-available/000-default.conf:cached |
複雑そうに見えますが、2行目以降は my.cnf をはじめとする設定ファイルを共用するため、それぞれのパスを ./docker/config/
から ./../docker/config/
に変更してるだけです。
なお、MySQL は従来の公式イメージをエミュレーションで使うこともできます。
Docker Hub で利用したいイメージの詳細ページに移動後、DIGEST:
に続く文字列をコピーし
image: mysql@sha256:360d1924d86cbf416f2c84687c2037e153080fed932798a73c5c6b4ceb7399e9
の形で指定します。
コンテナの起動
ここでも、M1 Mac のときだけ arm64-craft3
ディレクトリに移動してからコンテナを起動します。
$ cd arm64-craft3
$ docker-composer up -d --build
あとはブラウザで https://craft3.docker/admin
にアクセスして、問題なく管理画面が操作できることを確認できれば完了です。
やってみて
まだしばらく先かな・・・と思っていた M1 Mac の Docker 環境ですが、Tech Preview ながらも安定して動いているため、自分の使い方なら実務レベルでも問題なさそうだと考えています。既存設定を少し調整するだけで対応できるのも、便利ですね。
あとは本当に問題ないか確かめるためにも、M1 MacBook Air 片手に出張行きたいなと(ただの願望 w