Docker on M1 MacでHasuraを動かす
Docker Desktop の Apple Silicon 対応状況
Docker Desktop for Mac は、2021/04/25に公開された v3.3.1 で Apple Silicon に正式対応しました。
しかし実際に動くかどうかは動かそうとしているイメージ次第で、まだまだ対応していないイメージもあります。
Hasura を動かす
こちらに issue が上がっていますが Hasura の公式 Docker イメージはまだ Apple Silicon に対応していません。
非公式ですが fedormelexin/graphql-engine-arm64
というイメージが代わりに対応してくれているので、これを使うことで動かすことができます。
- image: hasura/graphql-engine:v1.3.3.cli-migrations-v2
+ image: fedormelexin/graphql-engine-arm64:v1.3.3.cli-migrations-v2
こちらにタグ一覧があるので、適宜タグを選択しましょう。
PostGIS を動かす (オプション)
Docker 公式イメージの postgres
は Apple Silicon でも問題なく動くのですが、現在の開発プロジェクトでは PostGIS 拡張を使っているため postgis/postgis
イメージを使っています。
こちらもまだ Apple Silicon に対応しておらず issue が上がっています。
こちらはスクリプト自体は互換性があり手元でビルドすれば動くそうですので、 /postgis
ディレクトリに Dockerfile
initdb-postgis.sh
update-postgis.sh
をコピーしてきてビルドするようにしました。
- image: postgis/postgis:11-3.0-alpine
+ build:
+ context: ./postgis
従来の設定との互換性を保つ
docker-compose.yml
ファイルを修正してしまうと逆に今まで動いていた環境で動かなくなってしまいます。 Git でコミットしないように気をつけるみたいな運用だと絶対に間違えてコミットしてしまうので、うまく共存する仕組みを考える必要があります。
docker-compose
コマンドは -f
オプションで設定ファイルを指定できます。デフォルトでは docker-compose.yml
ですが、実はもうひとつ docker-compose.override.yml
というファイルが存在するとこれで上書きしてくれる仕組みがあります。
この仕組みをつかって、 docker-compose.arm64.yml
というファイルを作り、必要な人だけ docker-compose.override.yml
にシンボリックリンクを置くことでこれが適用されるようにしてみました。
+ docker-compose.override.yml
services:
postgres:
build:
context: ./postgis
hasura:
image: fedormelexin/graphql-engine-arm64:v1.3.3.cli-migrations-v2
ln -s docker-compose.arm64.yml docker-compose.override.yml
この方法であれば毎回 -f
オプションを指定するよりシンプルです。
他の方法として Makefile
を使えばアーキテクチャ別にコマンドを実行できるか検討しましたが、今回はもともと Makefile
は使っていないためこの方法を採用しました。
まとめ
Docker Desktop、 Homebrew などのツールが対応してきていており、 Apple Silicon での開発も問題なくできるようになってきた印象です。
Hasura のようにまだ公式で対応していないイメージでもそのうち必ず対応するでしょうが、今のうちに対応しておくことで開発機の選択肢が増えてよさそうです。
今回 docker-compose.override.yml
について初めて知りましたが、知っていると色々と応用が効きそうです。
他にいい方法があれば是非コメントいただきたいです。
Discussion
最新のバージョンでサポートされたようです - https://github.com/hasura/graphql-engine/issues/6337#issuecomment-990896581
コメントありがとうございます。記事も更新しました!
手元で試してみたところしっかり動きました。