'Docker start' параллельно? - PullRequest
       41

'Docker start' параллельно?

0 голосов
/ 24 сентября 2018

Я запускаю 1000 контейнеров в одной сети Docker, все из одного образа Docker.

В настоящее время развертывание занимает много времени.Я разделил процесс на docker create и docker start, в отличие от монолитного docker run.

Есть ли способ раскрутить контейнеры параллельно?- Рад работать в программном интерфейсе (Go, C, что угодно) или использовать команды CLI.

Связанный: Может ли Docker Engine запускать контейнеры параллельно [спросил и ответил 3 года назад]

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Развертывание контейнеров с помощью Swarm или K8s - это просто дополнительный уровень абстракции поверх развертывания большого количества контейнеров с помощью команды запуска, они не ускорят процесс (только упростят управление), поэтому яНе уверен, почему так много людей порекомендуют это на ваш вопрос.Больше уровней абстракции не ускоряет решение.Они разрешают горизонтальное масштабирование, поэтому, если вы можете распределить эти контейнеры по нескольким хостам докеров, решение для оркестровки может упростить управление и обеспечить автоматическое восстановление после любых сбоев.

Команда run являетсяобертка вокруг создания / начала.И все эти команды docker являются небольшими оболочками вокруг REST API для dockerd.Вы можете перейти непосредственно к этому API, но, скорее всего, время потрачено на настройку пространств имен, включая правила IPAM и iptables для работы в сети.Я не знаю ни одного параллельного API, который бы ускорил запуск большого количества контейнеров.Один из способов ускорить это - удалить часть изоляции пространства имен или посмотреть другие опции для драйверов, используемых для создания пространства имен.Переключение на хост-сеть полностью пропускает сеть моста контейнера и правила iptables, помещая ваш контейнер в то же сетевое пространство имен, что и хост.

Или с сетью вы можете сконфигурировать контейнер с сетью «none», чтобы избежатьподключений к мостовой сети и правилам iptables, хотя у вас все еще будет петлевой адрес.У вас есть возможность подключить работающий контейнер к сети после его запуска, поэтому, если у вас нет опубликованных портов, это может быть возможностью отделить команду запуска от настройки сети, в зависимости от вашего варианта использования.

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

0 голосов
/ 03 октября 2018

1000 контейнеров в одной виртуальной машине (или машине Baremetal) не похоже на масштабируемое решение.

Я бы предложил систему оркестровки контейнеров, например, Kubernetes, Docker Swarm, Nomad (в порядке моего личногопредпочтение) с многоузловой конфигурацией высокой доступности.Docker Swarm гораздо проще в настройке, чем его популярный аналог, Kubernetes (K8s)

...