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欲しいものリスト>