web-dev-qa-db-ja.com

Docker並列操作の制限

実行できる並列Dockerプッシュ/プルの数に制限はありますか?

例えば。 Dockerプル/プッシュコマンドをスレッド化して、同時に異なるイメージをプル/プッシュする場合、並列プッシュ/プルの数の上限はどれくらいでしょうか

または代わりに

ある端末でdocker pull ubuntuを実行し、別の端末でdocker pull httpdなどを実行します-Dockerがサポートする制限は何ですか?

19
rmoh21

Dockerデーモン(dockerd)には2つのフラグがあります。

  --max-concurrent-downloads int          Set the max concurrent downloads for each pull
                                          (default 3)
  --max-concurrent-uploads int            Set the max concurrent uploads for each Push
                                          (default 5)

上限は、プロセスに許可する開いているファイルの数(ulimit -n)。他のDockerファイルハンドルにはオーバーヘッドがいくらかありますが、プッシュとプルのそれぞれが、リモート接続用とローカルファイルストレージ用の複数のハンドルを開くと思います。

この複雑さをさらに複雑にするのが、イメージのプッシュとプルのそれぞれで、同時制限まで、レイヤーごとに1つずつ、複数の接続を開くことです。したがって、12個の同時プルを実行すると、プルする可能性のあるレイヤーが50〜100になる可能性があります。

Dockerではこれらの制限を引き上げることができますが、より多くの同時接続を開くためのマイナスのリターンでなければ、リターンが減少するという実際的な制限があります。リモートレジストリへの帯域幅が制限されていると仮定すると、より多くの接続がその帯域幅を分割するだけであり、Docker自体は最初のレイヤーが完了するまで待機してから、その送信の解凍を開始します。また、中断されたドッカーのプルまたはプッシュは、レイヤーの部分的な送信をすべて失うため、より多くの同時接続で再送信する必要がある潜在的なデータを増やします。

デフォルトの制限は開発環境に適しています。調整する必要がある場合は、同時セッションの最大数を見つける前に、パフォーマンスの向上を測定することをお勧めします。

18
BMitch

オプションは構成ファイルで設定されます(LinuxベースのOSは、パス:/etc/docker/daemon.jsonおよびC:\ ProgramData\docker\config\daemon.jsonにあります)。

/etc/docker/daemon.jsonを開きます(存在しない場合は作成します)

値(プッシュ/プルの場合)を追加し、並列操作の制限を設定します。

{
    "max-concurrent-uploads": 1,
    "max-concurrent-downloads": 1
}

再起動デーモン:Sudo service docker restart

20
Daniel I. Cruz