Docker をスケーリングして何百万人もの開発者にサービスを提供: ネットワーク エグレス

このブログの パート 1 では、世界最大のコンテナー レジストリである Docker Hub に格納されているすべてのイメージを分析した詳細について説明します。 これは、新しい利用規約の更新が、Docker Hub を使用してコンテナー イメージと CI/CD パイプラインを管理する開発チームにどのように影響するかをよりよく理解できるようにするために行われました。

このブログ投稿のパート 2 では、コンテナー イメージのプルのレート制限について詳しく説明します。 これは、更新された Docker 利用規約 (ToS) 通信の一環としても発表されました。 2020 年 11 月 1 日に有効になる Docker サブスクリプション プラン に対する次のプル レート制限について詳しく説明しました。

  • 無料プラン–匿名ユーザー:6時間あたり100プル 
  • 無料プラン – 認証済みユーザー: 6 時間あたり 200 プル
  • プロプラン– 24時間で50,000プル
  • チームプラン – 24 時間で 50,000 回のプル

Docker では、プル レート制限を Docker Hub へのマニフェスト要求の数として定義します。 Docker イメージプルのレート制限は、イメージの所有者のアカウントタイプではなく、イメージを要求しているユーザーのアカウントタイプに基づいています。 匿名 (認証されていない) ユーザーの場合、プル レートは個々の IP アドレスに基づいて制限されます。 

コンテナー イメージ レイヤーに関して、お客様やコミュニティから質問が寄せられています。 プルレート制限の一部として画像レイヤーはカウントされません。 マニフェスト要求を制限しているため、現時点ではプルに関連するレイヤー (BLOB 要求) の数は無制限です。 これは、よりユーザーフレンドリーにするためのコミュニティのフィードバックに基づく変更であるため、ユーザーは使用している可能性のある各画像のレイヤーをカウントする必要はありません。

Docker Hub のプル レートの詳細

レート制限が必要な理由とその適用方法を判断するには、Docker Hub からのイメージのダウンロードの分析にかなりの時間を費やしました。 私たちが見つけたことは、Dockerユーザーの大多数が通常のワークフローで期待される速度でイメージをプルしたことを確認しました。 ただし、少数の匿名ユーザーによる影響は甚大です。 たとえば、Hubでのダウンロードの約30%は、匿名ユーザーのわずか1%からのものです。

貼り付けた画像 0

新しいプル制限はこの分析に基づいているため、ほとんどのユーザーは影響を受けません。 これらの制限は、開発者の通常のユース ケース (Docker の学習、コードの開発、イメージの構築など) に対応するように設計されています。

開発者がプルレート制限を理解するのを支援 

影響と制限がどこに着地するかを理解したので、これらの制限がどのように機能するかを技術レベルで定義する必要がありました。 イメージのプルを Docker レジストリに制限することは複雑です。 レジストリ仕様にはプルAPIは見つかりません–存在しません。 実際、イメージのプルは実際にはマニフェストと BLOB API 要求の組み合わせであり、これらはクライアントの状態と問題のイメージに応じて異なるパターンで実行されます。 

たとえば、イメージが既にある場合、Docker Engine クライアントはマニフェスト要求を発行し、返されたマニフェストに基づいて参照されているすべてのレイヤーがあることを確認して停止します。 一方、複数のアーキテクチャをサポートするイメージをプルする場合は、マニフェスト要求が発行され、サポートされている各アーキテクチャのイメージマニフェストのリストが返されます。 その後、Docker Engine は、実行されているアーキテクチャに対して別の特定のマニフェスト要求を発行し、そのイメージ内のすべてのレイヤーの一覧を受け取ります。 最後に、不足している各レイヤー (BLOB) を要求します。

したがって、イメージプルは実際には1つまたは2つのマニフェストリクエストであり、0から無限のBLOB(レイヤー)リクエストです。 従来、Docker は BLOB (レイヤー) に基づいてレート制限を監視していました。 これは、BLOB が帯域幅の使用量と最も密接に相関しているためです。 ただし、これは追跡が難しく、プルしているイメージのレイヤー数によっては一貫性がなく、Dockerfileの優れたプラクティスを思いとどまらせ、Dockerイメージとレジストリの専門家でなくても作業を完了したいだけのユーザーにとって直感的ではないというコミュニティからのフィードバックに耳を傾けました。

そのため、今後のマニフェストリクエストに基づいてレート制限を行います。 これには、プルとより直接的に結合されるという利点があるため、ユーザーにとって理解しやすいです。 小さなトレードオフがあります-すでに持っている画像をプルした場合、レイヤーをダウンロードしなくてもこれはカウントされます。 全体として、このレート制限の方法が公正でユーザーフレンドリーであることを願っています。

フィードバックをお待ちしております

一般的なユースケースに基づいてこれらの制限を監視および調整し、制限がユーザーの各層に適切であることを確認し、特に開発者が作業を完了するのを妨げないようにします。

これらの変更に照らして CI と運用システムを構成するためのブログ投稿については、今後数週間でご期待ください。

最後に、オープンソースコミュニティに対するDockerの取り組みの一環として、11月1日までに新しいオープンソースプランの提供を発表します。 オープンソースプランを申し込むには、 こちらの短いフォームに記入してください。

最近の利用規約の変更の詳細については、 FAQを参照してください。

より高いイメージプル制限を必要とするユーザーのために、DockerはProおよびTeamプランの機能として24時間で50,000プルも提供します。 利用可能なプランを表示するには 、www.docker.com/pricing にアクセスしてください。
いつものように、私たちはあなたの質問やフィードバックを歓迎します [メール保護]