Контейнеры – это способ виртуализации операционной системы, позволяющий запускать приложение и его зависимости в виде процессов с изолированными ресурсами. Контейнеры позволяют легко упаковывать код приложений, их настройки и зависимости в простые в использовании компоновочные блоки, обеспечивающие единообразную среду, эффективность и производительность труда разработчиков, а также контроль версий. Контейнеры обеспечивают быстрое, надежное и единообразное развертывание приложений вне зависимости от среды развертывания. Контейнеры также обеспечивают более точное управление ресурсами, что, в свою очередь, повышает эффективность инфраструктуры. Использование контейнеров в облаке AWS позволяет создавать надежные, масштабируемые приложения и сервисы, использующие такие преимущества облака AWS, как эластичность, доступность, безопасность и экономия за счет масштаба. Кроме того, вы платите только за те ресурсы, которые используете.
Amazon EC2 Container Service
Начало работы
Контейнеры обеспечивают легкость переноса и помогают снизить организационные и технические трения, возникающие при прохождении приложением жизненного цикла от разработки до тестирования и эксплуатации. Контейнеры объединяют в себе все необходимые файлы приложения и зависимое ПО в виде компоновочного блока, развертывание которого можно выполнить на любом вычислительном ресурсе, независимо от ПО, операционной системы или аппаратной конфигурации (т. е. можно запускать один и тот же контейнер на ноутбуке под управлением Ubuntu и на рабочих серверах Red Hat Enterprise Linux). Все, что было упаковано в виде контейнера локально, будет развертываться и запускаться одинаково как в тестовой, так и в рабочей среде. Это большое преимущество, позволяющее надежно и единообразно развертывать приложения вне зависимости от среды. Устраняется необходимость настройки каждого сервера в отдельности; можно быстрее выпускать версии ПО с новыми возможностями.
Контейнеры способствуют более полному использованию вычислительных ресурсов, так как позволяют легко запускать несколько приложений на одном и том же инстансе. Применяя контейнеры, можно указать точный объем памяти, дискового пространства и ресурсов ЦПУ, которые будут использоваться контейнером на инстансе. Контейнеры быстро загружаются, потому что каждый контейнер является только процессом в операционной системе, обеспечивающим работу приложения и его зависимых компонентов. Такое пониженное потребление ресурсов позволяет быстро запускать и завершать приложения или задачи, объединенные в контейнере, что обеспечивает быстрое масштабирование приложений в любую сторону. Для выпуска новых версий приложения можно использовать сине-зеленые (динамические) схемы развертывания (например, с помощью Amazon EC2 Container Service), так как все приложение и его зависимые компоненты содержатся в одном образе. Контейнеры также обеспечивают изоляцию процессов, что позволяет помещать каждое приложение и его зависимые компоненты в отдельный контейнер и запускать их в одном и том же инстансе. Так как каждый контейнер изолирован от других, отсутствуют совместно используемые зависимые компоненты и проблемы совместимости (например, можно запустить два контейнера, использующих различные версии библиотек, в одном и том же инстансе Amazon EC2).
Можно также создать образ контейнера, служащий основой для других образов. Группы эксплуатации могут создавать базовые образы, состоящие из операционной системы, конфигураций и различных утилит. Группы разработчиков могут создавать свои приложения поверх базового образа. Такая система позволяет избежать сложностей настройки сервера.
Применение контейнеров увеличивает производительность разработчиков за счет устранения зависимых компонентов, используемых несколькими сервисами, и возможных конфликтов. Каждый компонент приложения можно разбить на несколько различных контейнеров, запускающих различные микросервисы. Контейнеры изолированы друг от друга, поэтому не надо беспокоиться о синхронизации библиотек или зависимых компонентов между сервисами. Разработчики могут независимо выполнять обновление каждого сервиса, потому что конфликт библиотек отсутствует.
Контейнеры позволяют отслеживать версии кода приложения и зависимых компонентов. Образы контейнера Docker содержат файл манифеста (Dockerfile), который позволяет легко обслуживать и отслеживать версии контейнера, проверять различия между версиями и выполнять откаты до предыдущей версии.