Docker

menu icon

Docker

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

Что такое Docker?

Docker — платформа контейнеризации с открытым исходным кодом. С ее помощью разработчики могут упаковывать приложения в контейнеры — стандартизированные исполняемые компоненты, сочетающие в себе исходный код приложения с библиотеками операционной системы (ОС) и зависимостями, необходимыми для выполнения этого кода в любой среде. По мере перехода организаций к облачной разработке и гибридным мультиоблачным средам контейнеры, упрощающие доставку распределенных приложений, набирают все большую популярность.

Разработчикам необязательно использовать Docker для создания контейнеров, однако с этой платформой процесс разработки, развертывания контейнеров и управления ими становится более легким, простым и безопасным. В сущности, Docker представляет собой набор инструментов, предназначенных для разработки, развертывания, выполнения, обновления и остановки контейнеров с использованием простых команд и средств автоматизации на основе одного API.

Термин «Docker» также означает компанию, которая продает коммерческую версию продукта, Docker, Inc. (внешняя ссылка), и проект Docker с открытым исходным кодом (внешняя ссылка), развитием которого занимается Docker, Inc. вместе с другими организациями и пользователями.

Почему контейнеры завоевали такую популярность и как они работают

Работа контейнеров основана на принципе изоляции процессов и встроенных функциях виртуализации ядра Linux. Эти возможности, например группы управления (Cgroup) для распределения ресурсов между процессами и пространства имен для ограничения доступа к процессам или видимости других ресурсов или областей системы, позволяют нескольким компонентам приложения совместно использовать ресурсы одного экземпляра ОС хоста — во многом аналогично тому, как гипервизор позволяет нескольким виртуальным машинам совместно использовать процессор, ОЗУ и другие ресурсы в рамках одного физического сервера.

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

  • Меньший размер: в отличие от виртуальных машин, контейнеры не содержат общие данные всего экземпляра ОС и гипервизора; в их состав входят только процессы ОС и зависимости, необходимые для выполнения кода. Размер контейнеров исчисляется мегабайтами, в то время как для размер некоторых виртуальных машин может достигать нескольких гигабайт. Это позволяет более эффективно использовать аппаратные ресурсы и обеспечивает более быстрый запуск.
  • Более эффективное использование ресурсов: контейнеры позволяют запускать в несколько раз больше копий приложения на одном и том же физическом оборудовании, чем при использовании виртуальных машин. Это позволяет сократить расходы на облачные среды.
  • Повышение эффективности разработчиков: в сравнении с виртуальными машинами контейнеры отличаются более быстрыми и простыми процедурами развертывания, предоставления ресурсов и перезапуска. Это идеальный выбор для конвейеров непрерывной интеграции и непрерывной доставки (CI/CD), а также оптимальный вариант для разработчиков, внедряющих методики Agile и DevOps.

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

Загрузить полный текст отчета: «Контейнеры на предприятии» (PDF, 1,4 МБ)

Зачем нужен Docker?

Docker уже настолько популярен, что термины «Docker» и «контейнеры» стали синонимами. Однако первые технологии, связанные с контейнерами, появились много лет — или даже десятилетий (внешняя ссылка) — назад, и только в 2013 году о Docker узнала широкая аудитория.

Отдельно стоит отметить 2008 год, когда в ядре Linux была реализована полноценная система виртуализации LinuXContainers (LXC) для одного экземпляра Linux. Хотя LXC используется до сих пор, уже доступны более современные технологии. Ubuntu — современная операционная система Linux с открытым исходным кодом — также предоставляет эту возможность.

Инструменты Docker расширили встроенные в Linux функции контейнеризации, предоставив следующие преимущества:

  • Улучшенная, прозрачная переносимость: если контейнеры LXC часто используют специализированные конфигурации, то контейнеры Docker поддерживают работу на любых платформах, включая портативные компьютеры, ЦОД и облачные среды, без изменения.
  • Еще меньший размер и более точечные обновления: LXC позволяет объединять несколько процессов в один контейнер. В случае Docker каждый контейнер может содержать только один процесс. Это позволяет создавать приложения, которые могут продолжать работать в случае отключения одного из его компонентов для обновления или обслуживания.
  • Автоматическое создание контейнеров: Docker поддерживает автоматическое создание контейнеров на основе исходного кода приложения.
  • Контроль версий контейнеров: Docker может отслеживать версии образа контейнеров, выполнять откат до предыдущих версий, а также отслеживать авторов версий и способ разработки. Более того, поддерживается передача только изменений между существующей и новой версиями.
  • Повторное использование контейнеров: существующие контейнеры можно использовать в качестве базовых образов — по сути как шаблоны для создания новых контейнеров.
  • Общие библиотеки контейнеров: разработчикам доступен открытый реестр, содержащий тысячи контейнеров, добавленных пользователями.

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

Это объясняет высокие темпы внедрения и рост популярности Docker. В момент написания этой статьи отчет Docker Inc. содержал следующие цифры: 11 млн разработчиков и 13 млрд загрузок образов контейнеров ежемесячно (внешняя ссылка).

Инструменты и термины Docker

Ниже перечислены инструменты и термины, которые могут встретиться вам при работе с Docker:

DockerFile

Каждый контейнер Docker содержит простой текстовый файл с инструкциями по созданию образа контейнера Docker. DockerFile автоматизирует процесс создания образов Docker. Он представляет собой список инструкций для командной строки (CLI), которые необходимо выполнить Docker Engine для компоновки образа.

Образы Docker

Образы Docker содержат исходный код приложения, а также все инструменты, библиотеки и зависимости, необходимые для запуска контейнера. После запуска образ Docker становится одним экземпляром (или несколькими экземплярами) контейнера.

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

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

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

Контейнеры Docker

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

Docker Hub

Docker Hub (внешняя ссылка) — общедоступное хранилище образов Docker и «крупнейшая в мире библиотека и сообщество для хранения образов контейнеров». В этом хранилище собрано более 100 тысяч образов контейнеров, добавленных поставщиками коммерческого ПО, авторами проектов с открытым исходным кодом и отдельными разработчиками. В Docker Hub можно найти образы, созданные Docker, Inc., сертифицированные образы, принадлежащие Docker Trusted Registry, а также тысячи других образов.

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

Демон Docker

Демон Docker — это служба, запущенная в операционной системе пользователя, например Microsoft Windows, Apple MacOS или iOS. Данная служба создает образы Docker и управляет ими с помощью команд клиента, выполняя роль центра управления для соответствующей реализации Docker.

Реестр Docker

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

Развертывание и оркестрация Docker

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

Docker Compose

Если все контейнеры, применяемые для создания приложения, расположены на одном и том же хосте, то для управления архитектурой приложения можно использовать Docker Compose. Docker Compose создает файл YAML со списком сервисов для добавления в приложение, а также позволяет развертывать и запускать контейнеры с помощью одной команды. Кроме того, в Docker Compose можно определить постоянные тома для хранения данных, указать базовые узлы, а также задокументировать и настроить зависимости между сервисами.

Kubernetes

Для мониторинга и управления жизненным циклом контейнеров в более сложных средах требуется специальный инструмент оркестрации контейнеров. Большинство разработчиков предпочитают использовать Kubernetes, хотя в Docker есть встроенный инструмент оркестрации под названием Docker Swarm.

Kubernetes — контейнерная платформа с открытым исходным кодом, созданная в процессе работы над внутренним проектом Google. Kubernetes обеспечивает планирование и автоматизацию задач, связанных с управлением контейнерными архитектурами, включая развертывание контейнеров, обновления, обнаружение служб, предоставление ресурсов хранилища, распределение нагрузки, мониторинг состояния и т. п. Кроме того, существует открытая экосистема инструментов для Kubernetes, включая Istio и Knative, позволяющая развернуть высокопроизводительные предложения PaaS (платформа как услуга) для контейнеризованных приложений и ускорить переход к бессерверным вычислениям.

Для получения более подробной информации о Kubernetes рекомендуем посмотреть видеоролик «Kubernetes в деталях»:

Kubernetes в деталях (10:59)

Docker и IBM Cloud

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

Сделайте следующий шаг:

  • Воспользуйтесь Red Hat OpenShift on IBM Cloud — управляемой услугой OpenShift на основе IBM Cloud с высочайшим уровнем масштабируемости и безопасности — для развертывания полностью управляемых кластеров Kubernetes с высоким уровнем доступности, чтобы автоматизировать процессы обновления, масштабирования и инициализации ресурсов.
  • Обеспечьте развертывание и запуск приложений во всех средах, независимо от поставщика облачных услуг, включая локальные среды, периферийные узлы и общедоступные облачные среды, с помощью IBM Cloud Satellite — управляемого распределенного облачного решения.
  • Упростите и консолидируйте озера данных за счет слаженного развертывания корпоративных хранилищ с поддержкой контейнеров локально и в общедоступных облачных средах с помощью решений IBM для гибридного облачного хранилища.
  • Упростите сложные процессы управления гибридной ИТ-архитектурой с помощью управляемых услуг IBM Cloud.

Начните работать с учетной записью IBM Cloud уже сегодня.