Docker と containerd の統合の拡張

Docker とコンテナードの統合を拡張して、イメージ管理を含めます。 この作業を早期に共有してフィードバックを得るために、この統合は、 最新の Docker Desktop 4.12.0 リリースでオプトイン実験機能として使用できます。

docker デスクトップの実験的な機能では、イメージのプルと保存に containerd を使用するオプションが有効になっている設定があります。

コンテナとは何ですか?

簡単に言うと、containerd は広く採用されている オープン コンテナー ランタイムです。 ホストシステム の完全な コンテナライフサイクルを管理します。 これには、イメージのプルとプッシュ、およびコンテナーの開始と停止の処理が含まれます。 言うまでもなく、containerdはコンテナエクスペリエンスの低レベルのブリックです。 開発者が直接使用するのではなく、DockerやKubernetesなどのシステムに埋め込むように設計されています。

コンテナ化されたプロジェクト へのDockerの関与は、2016年までさかのぼることができます。それは私たちにとって少し情熱的なプロジェクトだと言えます! プロジェクトを開始する理由はたくさんありましたが、私たちの目標は、コンテナの監視をコアDockerエンジンから別のデーモンに移動することでした。このようにして、Kubernetesのようなプロジェクトで再利用できます。 クラウドネイティブコンピューティング財団(CNCF)に寄付され、2017年現在、段階的な(安定した)プロジェクトです。

コンテナはDockerエンジンで何を置き換えますか?

前述したように、Dockerはしばらくの間、コンテナのライフサイクル(作成、開始、停止)を管理するためにDocker Engineの一部としてコンテナを使用してきました。 この新しい作業は、コンテナーと Docker エンジンのより深い統合に向けた一歩です。 コンテナを使用して画像を保存し、それらをプッシュおよびプルできます。 また、containerd は、コンテナのルートファイルシステムをマウントするために、グラフドライバの代わりにスナップショットを使用します。 containerdのプラグ可能なアーキテクチャにより、複数のスナップショット機能もサポートできます。 

もっと詳しく知りたいですか? Michael Crosby さんは Moby ブログに スナップショット作成者に関する素晴らしい説明 を書いています。

イメージ管理のために containerd に移行する理由

Containerdは主要なオープンコンテナランタイムであり、さらに良いことに、すでにDockerエンジンの一部です。 イメージ管理を containerd に切り替えることで、より広範な業界ツールとの連携が強化されます。 

この移行により、主に次の 2 つの点が変更されます。

  • Dockerのグラフドライバーをコンテナのスナップショットツールに置き換えています。
  • コンテナーを使用して、イメージをプッシュ、プル、および格納します。

これはDockerユーザーにとって何を意味しますか?

開発者は、今日のDockerコマンドの動作と、多くのツールが既存のDocker APIに依存していることを気に入っています。 これを念頭に置いて、統合が可能な限り透過的であり、既存のワークフローを壊さないようにすることに全力で取り組んでいます。 そのために、まず実験的なオプトイン機能としてロールアウトし、早期のフィードバックを得ることができます。 最新の Docker Desktop で有効にすると、この実験的な機能を使用すると、内部でコンテナー化された Docker コマンド (実行、コミット、ビルド、プッシュ、読み込み、保存) を使用できます。

この統合には、次の利点があります。

  1. Containerdのスナップショットツールの実装により、新機能をすばやくプラグインできます。 いくつかの例には、 起動時にstargz を使用して画像を遅延プルしたり、ピアツーピア画像配布に nydusdragonfly を使用したりすることが含まれます。
  2. コンテナ・コンテンツ・ストアは、マルチプラットフォーム・イメージおよびその他のOCI互換オブジェクトをネイティブに格納できます。 これにより、Docker Engine (および将来的には他のコンテンツ) を使用してマルチプラットフォーム イメージを構築および操作する機能などの機能が有効になります。

マルチプラットフォーム イメージをビルドする場合、次の図は、コンテナー ストアを有効にしてビルド コマンドを実行したときに予想される内容を示しています。 

コンテナー化されたストアを有効にした Docker ビルド ターミナル出力の記録。

実験的な機能を有効にしないと、次の図に示すように、この機能がDockerドライバーでサポートされていないことを示すエラーメッセージが表示されます。 

コンテナー化されたストアを無効にした状態で失敗した Docker ビルド出力の記録。

実験的な機能を有効にしないことにした場合、大したことはありません。 物事は以前と同じように機能します。 ご不明な点がございましたら、 リリースノートで詳細をご覧ください。

コンテナ統合のロードマップ

このコンテナ化された統合に関しては、Dockerコミュニティに対して可能な限り透明性を保ちたいと考えています(ここで驚くことはありません! このため、ロードマップを作成しました。 統合は、次の 2 つの主要な手順で行われます。

  1. Docker Desktop の初期バージョンは、一般的なワークフローを可能にしますが、このアプローチが機能することを証明するために既存のイメージには触れません。
  2. 次に、containerd を使用するようにユーザー イメージを移行し、すべてのユーザーに対してこの機能をアクティブ化するコードを記述します。

このような統合の拡大を可能な限りシームレスにすることで、エンドユーザーであるお客様がメリットを享受できるように努めています。 このようにして、名前空間、コンテナ化されたプラグインなどのエコシステムの既存の機能を活用しながら、新しくエキサイティングなものを作成できます。

この実験的な機能を最初に Docker Desktop でリリースし、コミュニティからフィードバックをすばやく得ることができるようにしました。 ただし、この機能は将来の Docker エンジン リリースでも期待できます。  


進行中の統合作業の詳細については、 こちらからアクセスできます。 

結論

要約すると、Dockerユーザーは完全なコンテナ統合を楽しみにしています。 これにより、ネイティブのマルチプラットフォームサポートから暗号化された画像や遅延プルまで、多くのエキサイティングな機能がもたらされます。 したがって、最新バージョン のDockerデスクトップ をダウンロードし、コンテナ化された実験的機能を有効にして、試してみるようにしてください。 

私たちは早い段階で物事を共有し、Dockerコミュニティからフィードバックを得るのが大好きです—それは私たちがあなたのためによりよく働く製品を構築するのに役立ちます。 コミュニティのSlackチャンネル に参加するか、 フィードバックフォームを使用してご連絡ください。