Лимит параллельных операций докера

Есть ли ограничение на количество параллельных нажатий/выходов Docker, которые вы можете сделать?

Например, если вы выполняете команды Docker pull/push, чтобы они одновременно вытягивали/толкали разные изображения, что было бы верхним пределом количества параллельных push/pulls

Или альтернативно

На одном терминале вы делаете docker pull ubuntu на другом, вы делаете docker pull httpd и т.д. - какой будет предел Докер?

Ответ 1

Демон docker (dockerd) имеет два флага:

  --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). Там будут некоторые накладные расходы на другие файлы файлов докеров, и я ожидаю, что каждый push и pull откроет несколько дескрипторов, один для удаленного подключения и другой для локального хранилища файлов.

Чтобы усложнить это, каждое нажатие и вытягивание изображения откроет несколько соединений, по одному на каждый уровень, до параллельного предела. Поэтому, если вы запускаете дюжину одновременных выдержек, у вас может быть 50-100 потенциальных уровней.

В то время как докер позволяет увеличить эти ограничения, существует практический предел, в котором вы увидите уменьшение прибыли, если не отрицательный возврат к открытию более параллельных подключений. Предполагая, что ширина полосы пропускания в удаленном реестре ограничена, большее количество подключений будет просто разделять эту полосу пропускания, и сам докер будет ждать завершения самого первого уровня до того, как он начнет распаковывать эту передачу. Также любое прерывание или нажатие докеры потеряет любые частичные передачи слоя, поэтому вы увеличите потенциальные данные, которые вам нужны для повторной передачи с использованием более параллельных соединений.

Пределы по умолчанию хорошо подходят для среды разработки, и если вы обнаружите необходимость их корректировки, я бы рекомендовал измерить улучшение производительности, прежде чем пытаться найти максимальное количество параллельных сеансов.

Ответ 2

Параметры задаются в файле конфигурации (ОС на базе Linux находится по пути: /etc/docker/daemon.json и C:\ProgramData\docker\config\daemon.json в Windows)

Откройте /etc/docker/daemon.json (если его не существует, создайте его)

Добавьте значения (для push/pull) и установите предел параллельных операций

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

Перезапустите демон: sudo service docker restart