Docker Desktop for Macでamd64のDockerイメージを速く動かす

M1, M2 MacのCPUアーキテクチャはarm64です。なので、Docker Desktop for Macでamd64のDockerイメージを動かすためにはエミュレータが必要になります。なるべく速くDockerイメージを動かす方法について検討してみます。

目次

M1, M2 Macでamd64のDockerイメージを使う

エミュレータを使うと動作速度が遅くなるため、arm64のDockerイメージがあるならそちらを使うのが良いです。ただ、amd64のDockerイメージしかない場合は使うしかありません。その際、以下のような警告が表示されました。

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

要求されたイメージのプラットフォーム(linux/amd64)が検出されたホストのプラットフォーム(linux/arm64/v8)と一致せず、特定のプラットフォームが要求されませんでしたとのこと。

PCはarm64なのに、amd64用のイメージを動かしていますよと指摘されています。警告を回避するには、例えば以下のようにDocker CLIの環境変数 DOCKER_DEFAULT_PLATFORMでプラットフォームを指定すれば良いです。

export DOCKER_DEFAULT_PLATFORM=linux/amd64

amd64のDockerイメージの実行速度を改善する

DOCKER_DEFAULT_PLATFORMで警告は出なくなってもamd64のイメージを使いますと容認しているだけです。警告が消えただけで問題は変わらずに残っています。エミュレータを使って動かしているので、それだけ速度が遅くなります。

速度低下を防ぐためにはふたつの方法があります。

  • arm64イメージを探したり、arm64イメージがある環境に変更する
  • エミュレータの速度を改善する

ひとつ目の方法ですが、例えば、MySQLの公式Dockerイメージがamd64のみしか対応していない場合、PostgreSQLに変えるとかです。データベースのソフトウェアの選定にはたくさんの要素が絡むため、あくまで例でしかありませんが、開発効率の観点はひとつのポイントになると思います。

ふたつ目の方法については、Docker Desktopが使っているエミュレータを調べてみました。

Docker Desktopで使われているエミュレータ

Docker Desktopのリリースノートを見ると、使われているエミュレータはQEMU -> Virtualization framework -> Rosettaと変わっているようです。

QEMU Qemu 7.0.0 used for cpu emulation, inside the Docker Desktop VM.

Virtualization framework Set Virtualization framework as the default hypervisor for macOS >= 12.5.

Rosetta New Beta feature for MacOS 13, Rosetta for Linux, has been added for faster emulation of Intel-based images on Apple Silicon.

Rosettaはベータ版で、使うためには「Settings」「Features in development」からUse Rosetta for x86/amd64 emulation on Apple Siliconのチェックボックスをオンにする必要があります。

Dockerの対応によって、エミュレータは継続的に改善されているようです。Rosettaを使うことで速度はさらに改善するはず。ベータが早く取れることを期待してます。






Amazon欲しいものリスト

私が作業中に飲んでいるコーヒーや欲しいマンガなどを集めました。開発・執筆の励みになりますのでクリックして頂ければ幸いです。

<Amazon欲しいものリスト>