Dockerの公式画像がマルチプラットフォームになりました

先週、Dockerは公式イメージに大きなアップデートを公開し、マルチプラットフォーム対応にしました。 これで、実行すると、 docker run hello-worldDocker CEとEEは、x86-64 Linux、Windows、ARM、IBM Zメインフレーム、またはDockerが実行されるその他のシステムのいずれであっても、正しいhello-worldイメージをプルして実行します。 Dockerが追加のオペレーティングシステム(Windowsなど)とCPUアーキテクチャ(IBM Zなど)のサポートを急速に追加しているため、これは重要なUXの改善です。

Docker 公式イメージは、以下を含むコンテナー イメージのキュレーションされたセットです。

  • UbuntuBusyBox 、 Debianなどの基本オペレーティングシステムイメージ
  • GoPython 、 Javaなどの一般的なプログラミング言語用のすぐに使用できるビルドおよびランタイムイメージ
  • PostgreSQLNeo4j 、 Redisなどのデータストア用の使いやすい画像
  • WordPressGhost 、 Redmine 、その他多くの人気のあるオープンソースプロジェクトを実行するためのパッケージ化されたソフトウェアイメージ

公式イメージは常にx86-64Linuxで利用可能です。 x86以外のLinuxアーキテクチャ用のイメージも利用可能ですが、別の名前空間(docker pull s390x/golang IBM Zメインフレームの場合)または別のタグdocker pull golang:nanoserver (Windowsの場合)のいずれかからフェッチする必要があります。 これは、Dockerの新しいマルチアーキテクチャおよびマルチOSオーケストレーション機能のユーザーにとって私たちが望んでいたシームレスでポータブルなエクスペリエンスではありませんでした

幸いなことに、Dockerレジストリと配布プロトコルは、 マニフェストリストと呼ばれるテクノロジーを使用して、Docker 1.10以降マルチプラットフォームイメージをサポートしてきました。 マニフェスト リストは、レジストリ内の単一アーキテクチャ イメージ マニフェスト ( など golang) の代わりに使用でき、("プラットフォーム"、"マニフェスト参照") タプルのリストが含まれます。 レジストリがイメージマニフェストではなくレジストリリストを使用してコマンドに docker pull 応答する場合、Dockerはマニフェストリストを調べてから、実行されているプラットフォームの正しいリストエントリをプルします。

配布プロトコルには下位互換性があり、マニフェスト リストはヘッダーで Accept サポートを示すクライアントにのみ提供されます。 マニフェスト リストをサポートしていないクライアントの場合、レジストリは x86-64 Linux イメージ マニフェストにフォールバックします。 マニフェスト リストは Docker Content Trust によって完全にサポート されており、マルチプラットフォームのイメージ コンテンツが暗号で署名および検証されるようにします。

マニフェスト リストは、ほとんどの CPU アーキテクチャの Linux イメージに対してロールアウトされており、Windows のサポートもそこに到達しています。 お気に入りの CPU アーキテクチャまたは OS がまだカバーされていない場合は、プルするときにいつでも CPU または OS 固有のタグまたはイメージを引き続き使用できます。 ダイジェストによるイメージのフェッチも、この更新の影響を受けません。

マルチアーキテクチャイメージの構築に興味がある場合は、 Phil Estesの マニフェストリストツール を確認し、 PRを追跡してマニフェストコマンドをDocker CLIに追加してください。

マニフェストリストとマルチアーキテクチャDockerイメージは、長い間作業中でした。 これらの機能により、Docker が利用可能な多くのプラットフォームで Docker 公式リポジトリ イメージをシームレスにプルして使用することが簡単になったことを嬉しく思います。

リソース:

 

フィードバック

「Dockerの公式イメージがマルチプラットフォームになりました」に関する0の考え