見出し画像

Dockerは2024年1月時点でApple Silicon(M1,M2)搭載Macにどこまで対応してるの?


ライフマップ開発チームの富山です。今回は弊社でも使用しているApple Silicon(M1,M2)搭載MacとDockerに関するお話です。

現状:Rosetta for Linuxを正式リリース済

Dockerの公式がx86-64 (Intel) バイナリの実行をサポートする「Rosetta for Linux」を2023年10月に正式リリース。(Ver 4.25.0〜)
これにより、ネイティブに近い実行速度が期待できるのだとか。

Rosetta for Linux GA: Docker は、Rosetta 2 を使用した Apple シリコンでの x86-64 (Intel) バイナリの実行をサポートするようになりました。これはもはや実験的な機能ではなく、Docker Desktop のシームレスに統合されたコンポーネントです。
ネイティブに近いエミュレーション: x86_64 エミュレーションのパフォーマンスは、Rosetta 2 のおかげで、ネイティブ実行とほぼ同等になりました。つまり、アプリケーションの実行時にネイティブに近い速度が期待できます。

Docker公式記事より

設定:めっちゃ簡単

マシンにRosseta 2がインストールされている前提ですが、簡単です。
(Rosseta 2のインストール方法もDocker公式に掲載されてます)

簡単なアクティベーション: Rosetta for Linux を有効にするのは簡単です。 [Docker Desktop Settings] > [General ] に移動してオンに切り替えるだけで、強化されたパフォーマンスを利用できます。

Docker公式記事より

注意:全てが解決したわけではない

Arm ベースのマシン上において Intel ベースのコンテナーを動作させているのは「ベストエフォート」にすぎない、言い換えればできる範囲での対応でしかない、ということです。

DockerDesktopマニュアルより

「できる範囲での対応でしかない」という潔さ。(当然とも言える)
マルチアーキテクチャに対応するイメージが増えていくはずだから大丈夫とのこと。

Apple silicon 上では可能なら arm64 コンテナーの実行をお勧めします。 またコンテナーを制作する方は arm64 やこれを含むマルチアーキテクチャーのコンテナーとすることをお勧めします。 この問題は時が経つにつれて、また マルチアーキテクチャーをサポートする イメージが今後さらに再ビルドされていくにつれて、まれな問題となっていくものと考えています。

DockerDesktopマニュアルより

まだリリースしたてなので、人によっては致命的になりそうなバグもちらほらあるようですね。
以下はVer 4.26.0で解消されたバグの一部。

For Mac
Fixed an issue where Rosetta would not work with PHP.
Fixed the Unable to open /proc/self/exe Rosetta errors.

Dockerリリースノートより

もしアップデートするか迷う場合にはissuesやroadmapを見てみると、どんな既知のバグがあるのか・公式が対応中なのかどうか、ベータ版でどんな機能があるのか分かるので、アップデートをした方が良いかの判断材料になります。

結論:順次対応してくれている。今後はマルチアーキテクチャが鍵。

今後、各サービスの公式が出してくれているdocker imageがマルチアーキテクチャをサポートしていくのを待ちましょう。
ただし、古いバージョンのものはそこまでサポートしてくれるか分からないので、使う側もバージョンアップ対応などを検討する必要がありそうです。
(非公式のimageを使うという手もありますが、オススメできません)

この記事が気に入ったらサポートをしてみませんか?