Docker Desktop for Apple silicon

Apple silicon 上での Docker Desktop for Mac が正規安定版(GA release)として利用できるようになりました。 開発者によるローカル開発環境の選択肢が広がったことになります。 また ARM ベースアプリケーション開発に拡張することができます。

Docker Desktop for Apple silicon はマルチプラットフォームイメージにも対応しています。 これがあれば、複雑なクロスコンパイル開発環境を設定することなく、x86 と ARM アーキテクチャーの双方に対するイメージをビルドし実行することができます。 さらに docker buildx を用いれば、シームレスにマルチプラットフォームビルドをビルド作業に統合することができます。 そして Docker Hub によって、マルチプラットフォームイメージを同定し共有するために利用できます。

Download Docker Desktop for Mac on Apple silicon:

Docker Desktop のダウンロード

Apple チップの Mac


システム要件

Docker Desktop 4.3.0 からは、Rosetta 2 をインストールするためのハードウェア要件を削除しています。 Darwin/AMD64 を利用するにあたって、Rosetta 2 を必要とするコマンドラインツールが少しはあります。 以下の既知の問題の節を確認してください。 ただし十分な機能性を確保するためには、Rosetta 2 のインストールをお勧めします。 Rosetta 2 のインストールは、コマンドラインから手動で、以下のようにして行います。

$ softwareupdate --install-rosetta

既知の問題

  • コマンドラインツールの中には、Rosetta 2 がインストールされていないと、動作しないものがあります。
    • 旧バージョン 1.x におけるdocker-compose。 これにかわって Compose V2 の利用をお勧めします。 docker composeと入力するか、あるいは 一般タブUse Docker Compose V2(Docker Compose V2 の利用)オプションを有効にしてください。
    • docker scanコマンドと、それが依存しているsnykバイナリ。
    • docker-credential-ecr-login credential helper。
  • ARM64 アーキテクチャー向けのイメージがすべて利用可能となっているわけではありません。 Intel イメージの実行には、エミュレーションのもとで--platform linux/amd64をつけて実行することが必要です。 特に mysql イメージは ARM64 向けには利用できません。 これに対する当面の対処としては mariadb イメージを利用してください。

    しかし Apple 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 以降の修正

  • --privilegedが指定されたコンテナー内において、/dev/nullなどのデバイスが、適切に0666rw-rw-rw-)となりようにしました。 docker/for-mac#5527 を Fix に。
  • Docker Desktop にてアイドル時の CPU 消費を減少させました。

Docker Desktop RC 2 以降の修正

Docker Desktop RC 1 以降の修正

  • コンテナー間での HTTP および HTTPS トラフィックを正常に振り分けるようにしました。 docker/for-mac#5476 を Fix に。

Docker Desktop プレビュー 3.1.0 以降の修正

  • ビルドは将来バージョンに向けて自動アップデートされます。
  • HTTP プロキシーへのサポートが動作するようになりました。 これには TLS SNI を通じたno_proxyルールに基づくドメイン名へのサポートも含まれます。 docker/for-mac#2732 を Fix に。

Apple Silicon プレビュー 7 以降の修正

  • Kubernetes が動作するようになりました。 (ただし証明書を再生成するために、一度 Troubleshoot メニュー内からクラスターのリセットが必要になります。)
  • osxfs ファイル共有が動作します。
  • DNS エントリーhost.docker.internalvm.docker.internalは解決されました。
  • ハードコーディングされた IP アドレスの削除。 Docker Desktop は macOS によって割り振られた IP アドレスを動的に検出するようになりました。
  • 更新バージョンには、ディスク性能を向上させる変更が含まれています。
  • Docker メニューの Restart オプションが動作するようになりました。

フィードバック

みなさんからのフィードバックが重要と考えています。 GitHub リポジトリ Docker Desktop for Mac に issue を生成してフィードバックをお寄せください。

また Docker Community Slack への参加や #docker-desktop-mac チャネルへの質問をお願いします。

Docker Desktop, M1, Silicon, Apple