M1mac上でamd64なコンテナをRosettaで動かす

rosettaを使えるようになった。

今までもM1mac上でamd64なコンテナは動いたが、Venturaからqemuより速いRosetta2が使えるようになった。

必要要件

  • MacOS >= 13 (Ventura)
  • Rosetta2 がインストールされている
  • docker cli ツールがインストールされている

colimaを立ち上げる

colimaを使う。

colimaは"Containers in Lima"で、Limaは"Linux on Mac"、つまり"Containers on Linux on Mac"ということらしい。

まずはbrewでcolimaをインストール。

1
$ brew install colima

次に、Rosetta emulatedなvmを作る。

1
$ colima start --arch aarch64 --vm-type=vz --vz-rosetta

最後にdocker contextをこのvmを使うように指定する。 もしかしたら、colima startだけでcontextも変わっているかもしれない。

1
$ docker context use colima

これでdocker on Rosetta-emulated linuxが使える環境になった。

コンテナを走らせてみる

普通にやる。

1
2
$ docker run --rm --name alpine alpine uname -m
aarch64

--platform=linux/amd64をつけてみる。

1
2
$ docker run --rm --platform=linux/amd64 --name alpine alpine uname -m
x86_64

これで今までqemu(qemu-system-aarch64)でエミュレートしていたものがRosetta2(Virtual Machine Service)を使うようになった。

全体的に、CPU、メモリ使用率が下がった気がする。

注意点

Dockerfileや、docker-compose.ymlを使う場合は、明示的にlinux/amd64を指定すること。

当たり前ではあるが、そうしないとarmのvmなのでarmなイメージが使われる。

Dockerfile
1
2
FROM --platform=linux/amd64 mysql:latest
...
docker-compose.yml
1
2
3
4
5
...
  db:
    image: mysql:latest
    platform: linux/amd64
...

macが再起動したときにcolima startしなければならない。

色々、方法はありそうだが面倒くさくてやっていない。 colima startって打つだけだし。。。

おわり

おわり

Built with Hugo
Theme Stack designed by Jimmy