Назад | Перейти на главную страницу

один или несколько контейнеров докеров на хост

Итак, мы находимся на этапе разработки конвейера для развертывания нашего приложения в производственной среде. У нас есть 5 сервисов, которым нужно общаться друг с другом, и сейчас мы используем docker для разработки. Мы изучаем CodePipeline (github + CodeBuild + EB) для развертывания, но у нас есть сомнения относительно использования Elastic Beanstalk для одного контейнера (т.е. 1 контейнер, работающего на хост) или нескольких (несколько контейнеров, работающих на тех же хостах) Единственное преимущество, которое я могу Как видно из использования мультиконтейнера, это рентабельно (дешевле иметь парк экземпляров ec2 для всех контейнеров, чем иметь целый парк для работы только с 1 контейнером). Помимо этого, я могу видеть только дополнительную сложность, добавленную в многоконтейнерные контейнеры, из-за оркестрации и планирования задач для управления несколькими контейнерами на нескольких хостах. Итак, какова лучшая практика? 1 контейнер на хост? или несколько контейнеров на хост?

Single Docker Beanstalk отлично подходит, когда вы только начинаете работать с Docker. Его легко и привычно использовать, но тратит ресурсы.

Multi-Docker более продвинутый, но в основном следует тем же методам развертывания, что и Single Docker и Beanstalk в целом. Multi-Docker подготовит для вас кластер ECS и запустит задачу (не службу) на каждом экземпляре. Сценарии Beanstalk отслеживают состояние задачи, а сценарий выскочки отвечает за запуск / остановку задачи (для этого он использует агент ecs). На самом деле нет никаких дополнительных сложностей, поскольку все это берет на себя Beanstalk.

Каждый экземпляр будет запускать только 1 задачу, поэтому задачи масштабируются линейно с экземплярами в кластере, что делает его лишь немного менее затратным, чем Single Docker, и будет стоить такую ​​же сумму (при условии, что приложения одинакового размера и масштабируются аналогично). Единственное РЕАЛЬНОЕ преимущество Multi-Docker перед Single Docker - это возможность разделять части приложения.

Если вы начнете использовать Multi-Docker, вы очень быстро перейдете к ECS, поскольку он лучше подходит для запуска контейнеров. Если вы начнете с Single Docker, вы быстро почувствуете раздражение из-за ограничений одного контейнера и либо перейдете к Multi-Docker, либо к ECS Native. Я предлагаю просто полностью пропустить Beanstalk или использовать Multi-Docker, чтобы почувствовать и понять ECS, прежде чем покинуть корабль, как это делает большинство людей.

tl; dr Лучшей практикой для запуска контейнеров является установка кластера без использования Beanstalk.

p.s. Теперь с Fargate вам даже не нужно управлять кластером.