Что такое Docker?

Завершено

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

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

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

Существует несколько проблем, которые необходимо учитывать в предыдущем сценарии:

  • Управление средами размещения

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

  • Непрерывность доставки программного обеспечения

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

  • Эффективное использование оборудования

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

  • Переносимость приложений

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

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

Что такое контейнер?

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

Образ контейнера — это единица, используемая для распространения приложений.

Что такое контейнеризация программного обеспечения?

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

Что такое Docker?

Docker — это платформа контейнеризации, применяемая для разработки, доставки и выполнения контейнеров. Docker не предполагает использования гипервизора. При разработке и тестировании приложений можно запускать Docker на настольном ПК или ноутбуке. Настольная версия Docker поддерживает Linux, Windows и macOS. В рабочих системах Docker доступен для серверных сред, включая множество вариантов Linux и Microsoft Windows Server 2016 и более поздних версий. Docker поддерживают многие облачные среды, включая Azure.

Архитектура Docker

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

Модуль Docker

Модуль Docker состоит из нескольких компонентов, реализующих клиент-серверную архитектуру, при которой клиент и сервер работают на одном узле. Клиент взаимодействует с сервером с помощью REST API, что позволяет клиенту также взаимодействовать с удаленным экземпляром сервера.

Diagram showing a high-level overview of the Docker architecture.

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

Клиент Docker

Существует два варианта для клиента Docker: приложение командной строки с именем или графическим пользовательским интерфейсом (GUI) с именем docker Docker Desktop. Интерфейс командной строки и Docker Desktop взаимодействуют с сервером Docker. Команды docker из ИНТЕРФЕЙСА командной строки или Docker Desktop используют REST API Docker для отправки инструкций на локальный или удаленный сервер и функцию в качестве основного интерфейса, используемого для управления контейнерами.

Сервер Docker

Сервер Docker — это управляющая программа, которая называется dockerd. Управляющая программа dockerd отвечает на запросы клиента посредством REST API Docker и может взаимодействовать с другими управляющими программами. Сервер Docker также отвечает за отслеживание жизненного цикла контейнеров.

Объекты Docker

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

Docker Hub

Docker Hub — это реестр контейнеров Docker на основе модели "программное обеспечение как услуга" (SaaS). Реестры Docker — это репозитории, которые служат для хранения и распространения создаваемых образов контейнеров. Docker Hub является общедоступным реестром Docker, используемым по умолчанию для управления образами.

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