Apple silicon 対応 Docker Desktop

Apple silicon に対応した Docker Desktop for Mac が、一般提供開始リリースとして利用可能です。これで、ローカル開発環境としてアプリケーションを開発できるようになります。また、ARM をベースとしたアプリケーション向けの開発パイプラインも拡張できます。

Apple silicon 用 Docker Desktop for Mac は、 マルチプラットフォーム(multi-platform) イメージもサポートしています。これがあれば、複雑なクロスコンパイル開発環境を準備しなくても、x86 と ARM アーキテクチャの両方に対応するイメージの構築と実行をできるようにします。さらに、docker buildx を使えば、 構築パイプライン(build pipeline) にマルチプラットフォーム ビルドをシームレスに(途切れなく)統合できるようになります。そして、 Docker Hub で認証し、マルチプラットフォーム イメージを提供するリポジトリで共有します。

Apple silicon 対応 Docker Desktop をダウンロードします。

注釈

Docker Desktop のダウンロード

システム要件

Docker Desktop 4.3.0 から、ハードウェア要件から Rosetta 2 のインストールを削除しました。Darwin/AMD64 を使う場合は、 オプションのコマンドラインツールとして Roseta 2 が必要です。以下にある既知の問題のセクションをご覧ください。一方で、最高の体験を得るには、Rosetta 2 のインストールを推奨します。Rosetta 2 を手動でインストールするには、以下のコマンドを実行します。

$ softwareupdate --install-rosetta

既知の問題

  • Rosetta 2 をインストールしなければ、コマンドラインツールのいくつかが動作しません。

    • docker-compose の古いバージョン 1.x 。代わりに Compose V2 のインストールを推奨します。 docker compose を入力するか、 設定の General タブ にある Use Docker Compose V2 オプションを有効にします。

    • docker scan コマンドと、 基礎を成す(underlying) snyk バイナリ。

    • docker-credential-ecr-login 認証情報ヘルパー(credential helper)

  • イメージのいくつかは ARM64 アーキテクチャをサポートしていません。 Intel イメージでエミュレーションを使うには、実行時(または構築時)に --platform linux/amd64 を追加できます。

    一方、エミュレーション下の Applie silicon マシン上で、 Intel ベースのコンテナを実行しようとすると、コンテナの実行時に、時々 qemu が落ちてクラッシュを引き起こします。さらに、 qemu エミュレーション下では、ファイルシステム変更通知 API ( inotify )が動作しません。エミュレーション下でコンテナを正しく動作させようとしても、本来の状況と比べて遅くなり、より多くのメモリを使います。

    まとめると、Arm ベースのマシン上で Intel ベースのコンテナの実行とは、「ベストエフォート」のみと見なすべきです。 Apple silicon マシン上では、可能な限り arm64 コンテナの実行を推奨します。また、コンテナの作者に対しては、arm64 やマルチアーキテクチャに対応したコンテナのバージョンの作成を推奨しています。時間が経てば マルチアーキテクチャをサポートする イメージの再構築が増えていき、この問題は減っていくと考えています。

  • コンテナ内からインターネットに対する ping が期待通りに動作しません。ネットワークの確認には、 curlwget の利用を推奨します。 docker/for-mac#5322 をご覧ください。

  • TCP 通信が half-closed の場合、時々データ欠損が発生する場合があります。

Docker Desktop RC 3 までの修正

  • Docker Desktop は今後 /dev/null のパーミッションを確保するようになり、 --privileged コンテナ内では他のデバイスが正しく 0666rw-rw-rw- ) に設定されます。 docker/for-mac#5527 の修正です。

  • Docker Desktop は今後アイドル CPU 消費を減らします。

Docker Desktop RC 2 までの修正

Docker Desktop RC 1 までの修正

  • コンテナ間の HTTP と HTTPS 通信が、今後正しく経路付けされます。 docker/for-mac#5476 の修正です。

Docker Desktop preview 3.1.0 までの修正

  • 以降のバージョンでは、ビルドを自動的に更新できるようにします。

  • HTTP プロキシのサポートが機能します。これには TLS SNI を経由した no_proxy ルールをベースとするドメイン名のサポートも含みます。 docker/for-mac#2732 の修正です。

Apple Silicon preview 7 までの修正

  • Kubernetes が動作します(しかしながら、証明書を再作成するため、一度トラブルシュートのメニューからクラスタのリセットが必要になるでしょう)。

  • osxfs ファイル共有が動作します。

  • host.docker.internalvm.docker.internal DNS エントリが名前解決できます。

  • 固定された(hard-coded) IP アドレスを削除しました。今後 Docker Desktop は macOS によって割り当てられた IP を動的に発見します。

  • 更新版に含まれる変更によって、ディスクのパフォーマンスが改善されるでしょう。

  • Docker メニューの Restart オプションが動作します。

参考

Docker Desktop for Apple silicon

https://docs.docker.com/desktop/mac/apple-silicon/