Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Как запустить контейнер Docker в облаке: 5 лучших решений

Роман Андреев
Роман Андреев
Технический писатель
09 октября 2023 г.
674
6 минут чтения
Средний рейтинг статьи: 5

Контейнеризация значительно упрощает процесс разработки программного обеспечения, и самое большое преимущество использования контейнеров заключается в их мобильности. Но запуск контейнера в облаке может приводить к некоторым сложностям. Конечно, можно развернуть контейнеры на серверах облачного провайдера по модели IaaS (инфраструктура как услуга), однако вам придется поддерживать эти серверы. Чтобы избежать этой проблемы, облачные провайдеры придумали модель CaaS (контейнеры как услуга).

Как запустить Docker в облаке без подготовки инфраструктуры

Контейнеры как услуга, или CaaS — это современная модель, которая позволяет разработчикам запускать свои контейнеры в облаке напрямую, то есть без необходимости развертывать инфраструктуру, в том числе инструменты оркестрации (Docker Swarm, Kubernetes, OpenStack и т. д.), а также программное обеспечение для управления кластером. Главные преимущества использования CaaS заключаются в следующем:

  • Снижение затрат — нет необходимости поддерживать безопасную инфраструктуру для запуска вашего контейнера, а значит работать по CaaS быстрее и дешевле.
  • Гибкость — в большинстве случаев вы можете легко переходить из облака в облако или даже обратно в локальную инфраструктуру, что освобождает вас от привязки к конкретному провайдеру.
  • Скорость — поскольку базовая инфраструктура уже подготовлена заранее и вам не нужно беспокоиться об управлении и поддержке оборудования, на котором будут работать ваши контейнеры, а значит вы сможете разворачивать их быстрее.
  • Безопасность — CaaS не только упрощает запуск приложений, но и улучшает безопасность, поскольку большинство решений CaaS предполагают сканирование уязвимостей.

При выборе подходящего решения CaaS нужно учитывать некоторые важные факторы. Это, например, возможность работать с многоконтейнерными приложениями, поддерживаемые функции хранения и форматы файлов, используемые технологии обеспечения сохранности данных. Разумеется, у каждого решения есть и другие возможности и ограничения, которые мы сейчас подробно и разберем.

Amazon Elastic Container Service (ECS)

Amazon ECS — это масштабируемая платформа оркестрации контейнеров от AWS, предназначенная для запуска и управления контейнерами в кластерной среде. Вы можете выбирать контейнеры для работы и то, сколько контейнеров запускать, а также способы их связи и ресурсы, использующие ваши контейнеры. Существует два способа использования ECS: через инстансы EC2 и с помощью Fargate.

  • В первом случае контейнеры будут развернуты на экземплярах EC2 (виртуальные машины), созданных для кластера. Благодаря этому вы получите полный контроль над типом используемого экземпляра EC2. Например, ваш контейнер используется для машинного обучения и ориентирован на графический процессор: значит, вы сможете запустить виртуальную машину, оптимизированную именно для этой задачи. А единственный недостаток такого решения заключается в том, что вам придется самостоятельно отвечать за установку исправлений, управление сетевой безопасностью и масштабирование.
  • С моделью AWS Fargate вам не придется беспокоиться об управлении инстансами EC2. Дело в том, что Fargate напрямую управляет базовыми серверами, необходимыми для запуска контейнеров, путем предварительной настройки кластера. Таким образом, вы избавите себя от необходимости управления инфраструктурой. Но с другой стороны, пока еще поддерживается только один сетевой режим (awsvpc), что может ограничивать вас в реализации ряда задач.

AWS Лямбда

Это бессерверный сервис от AWS, с помощью которого вы передаете код на различных языках (Java, Go, C#, Python, Powershell, Node.js, Ruby), и Amazon запускает его в соответствующем интерфейсе Lambda. Лямбда-функции в основном вызываются при подключении их к AWS API Gateway, который предоставляет функции как вызовы REST API. Изначально AWS Lambda не поддерживала приложения контейнеризации, однако в декабре 2020 года на этом сервисе от Amazon можно создать образ Docker и запускать контейнеры размером до 10 ГБ.

Использование Lambda для запуска контейнера Docker в облаке даст вам прежде всего хорошую масштабируемость: Lambda может создавать вплоть до 500 новых экземпляров каждую минуту в автоматическом режиме. Однако, поскольку Lambda — это собственная бессерверная технология AWS, вам, возможно, придется столкнуться с проблемами при переходе к другому поставщику облачных услуг. Из других ограничений отметим, что функции Lambda могут выполняться не более 15 минут, а значит можно забыть про долго выполняющиеся задачи.

AWS App Runner

Запущенный в мае 2021 года, AWS App Runner позволяет перенести веб-приложение в облако, не беспокоясь о масштабировании или связанной с приложением инфраструктуре. По сути, он просто запускает ECS с Fargate для выполнения вашего контейнера, но вам не нужно настраивать что-либо, связанное с Fargate, чтобы начать работу. AWS App Runner может работать в режиме сборки, извлекая код из вашего репозитория GitHub и собирая приложение при любых коммитах, которые вы можете отправить в основную ветку. Также он может работать в режиме контейнера, где вы подключаете свой реестр контейнеров (правда, на данный момент поддерживается только AWS ECR) и указываете свой образ.

Основное преимущество AWS App Runner для тех, кто хочет создать контейнер Docker в облаке, заключается в том, что его легко настроить и он предоставляет простой способ запустить веб-приложение в облаке. Из недостатков же отметим, что режим сборки поддерживает только среды выполнения Python и Node.js. Также режим сборки не имеет интеграции с AWS CodeCommit или другими системами управления версиями, а это означает, что вам придется использовать только GitHub. И наконец, приложение не может обмениваться данными с частными VPC.

Azure Container Instances (ACI)

Это решение от Microsoft предлагает: 

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

Также добавим, что, поскольку контейнер находится в вашей виртуальной сети, он может взаимодействовать с другими ресурсами в ней. А единственный недостаток ACI в том, что вызов контейнеров Docker поддерживается здесь только из реестра.

Google Cloud Run

CaaS-решение от Google построено на платформе Knative на базе Kubernetes. Как и в случае с AWS App Runner, вы можете указать реестр контейнеров или репозиторий, содержащий код вашего приложения. К преимуществам Google Cloud Run отнесем поддержку Google Secret Manager, а также то, что поддерживается код на многих языках программирования, в том числе Go, Python, Java, Node.js, Ruby. А из недостатков отметим разве что ограниченное количество регионов по сравнению, например, с сервисами Azure и AWS.

Заключение

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

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону