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

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

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

Docker использует клиент-серверный (C/S) шаблон архитектуры, используя удаленные API для управления и создания контейнеров Docker.

Контейнеры Docker создаются из образов Docker.

Связь между контейнерами и образами аналогична связи между объектами и классами в объектно-ориентированном программировании.

DockerОбъектно-ориентированный
КонтейнерObject
ImageКласс

Диаграмма архитектуры Docker

Рабочий процесс архитектуры Docker

  • Сборка образа: ИспользуйтеDockerfileСоздайте образ.
  • Отправка образа в реестр: Загрузите образ в Docker Hub или частный реестр.
  • Загрузка образа: черезdocker pullЗагрузите образ из реестра.
  • Запуск контейнера: Используйте образ, чтобы создать и запустить контейнер.
  • Управление контейнерами: Используйте команды клиента Docker для управления работающими контейнерами (например, просмотр логов, остановка контейнеров, проверка использования ресурсов и т. д.).
  • Сеть и хранилище: Контейнеры соединяются друг с другом через сети Docker, а данные сохраняются через тома Docker или bind-монтирования.

Далее давайте углубимся в основные компоненты Docker и механизмы их работы.

1, Клиент Docker

Docker-клиент — это интерфейс командной строки (CLI) для взаимодействия пользователей с демоном Docker. Это основной способ взаимодействия пользователей с системой Docker. Пользователи вводят команды через Docker CLI, которые отправляются демону Docker, и демон выполняет соответствующие операции.

  • Возможности: Позволяет пользователям взаимодействовать с демоном Docker с помощью команд, таких как создание контейнеров, сборка образов, просмотр состояния контейнеров и т. д.
  • Режим взаимодействия: Docker-клиент взаимодействует с демоном Docker через REST API или Unix-сокеты. Обычно используемый инструмент командной строки —docker, через который пользователи могут выполнять различные команды операций Docker.

Основные команды:

  • docker run: Запустить контейнер.
  • docker ps: Показать список запущенных контейнеров.
  • docker build: Собрать образ Docker.
  • docker exec: Выполнить команды в контейнере.

2, Демон Docker

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

Демон обычно работает как фоновый процесс, ожидая API-запросы от клиента Docker.

Особенности:

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

Демон Docker прослушивает запросы от клиентов Docker и выполняет эти запросы через Docker API. Демон отвечает за управление объектами Docker, такими как контейнеры и образы, и запускает контейнеры, удаляет контейнеры, изменяет конфигурации контейнеров и т. д. в соответствии с параметрами запроса.

Запустите демон Docker (обычно запускается автоматически):

sudo systemctl start docker

3, Docker Engine API

Docker Engine API — это RESTful-интерфейс, предоставляемый Docker, позволяющий внешним клиентам взаимодействовать с демоном Docker. Через этот API пользователи могут выполнять различные операции, такие как запуск контейнеров, сборка образов, просмотр состояния контейнеров и т. д. API предоставляет интерфейс HTTP-запросов и поддерживает кроссплатформенные вызовы.

Особенности:

  • Отправляйте HTTP-запросы к демону Docker для управления контейнерами и образами.
  • Предоставляет RESTful-интерфейс, позволяющий программно взаимодействовать с Docker.

Доступ можно получить черезcurlили другими HTTP-клиентами для доступа к Docker Engine API. Например, чтобы запросить текущую версию демона Docker:

curl --unix-socket /var/run/docker.sock http://localhost/version

4, Контейнеры Docker

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

Особенности:

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

Жизненным циклом контейнера управляет демон Docker. Контейнеры могут работать где угодно, поскольку они не зависят от конфигурации базовой операционной системы; все зависимости времени выполнения уже упакованы в образ.

Запуск контейнера:

docker run -d ubuntu

5, Образы Docker

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

Особенности:

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

Образы Docker можноdocker pullзагрузить из Docker Hub или частного реестра, либо можноdocker buildСобрать из Dockerfile.

Загрузить образ Ubuntu:

docker pull ubuntu

6. Реестры Docker

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

Особенности:

  • Хранить образы Docker.
  • Предоставлять функции для загрузки и скачивания образов.

Docker Hub предоставляет большое количество официальных образов и образов, поддерживаемых сообществом, таких как Ubuntu, Nginx, MySQL и т. д.

Отправить образ в Docker Hub:

docker push <username>/<image_name>

7, Docker Compose

Docker Compose — это инструмент для определения и запуска многоконтейнерных приложений Docker. С помощью Compose пользователи могут использовать одинdocker-compose.ymlФайл конфигурации определяет несколько контейнеров (сервисов), и эти контейнеры можно запустить одной командой. Docker Compose в основном используется для разработки, тестирования и развёртывания многоконтейнерных приложений.

Особенности:

  • Определите и запустите приложение, состоящее из нескольких контейнеров.
  • Настройте сервисы, сети и тома приложения с помощью YAML-файла.

Создайте простойdocker-compose.ymlфайл для настройки приложения, содержащего веб-сервис и сервис базы данных:

version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example

Запустите все сервисы, определённые в Compose:

docker-compose up

8, Docker Swarm

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

Особенности:

  • Управляйте многоузловыми кластерами Docker.
  • Управляйте развёртыванием и масштабированием контейнеров через планировщик.

Инициализируйте кластер Swarm:

docker swarm init

9, Сети Docker

Сети Docker позволяют контейнерам взаимодействовать друг с другом и подключаться к внешнему миру. Docker предоставляет несколько сетевых режимов для удовлетворения различных потребностей, таких какbridgeСеть (по умолчанию),hostСети иoverlayсети и т. д.

Особенности:

  • Управление сетевым взаимодействием между контейнерами.
  • Поддерживает различные сетевые режимы для адаптации к требованиям в разных сценариях.

Создайте пользовательскую сеть и подключите контейнер к сети:

docker network create my_network
docker run -d --network my_network ubuntu

10. Тома Docker

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

Особенности:

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

Создайте и смонтируйте том:

docker volume create my_volume
docker run -d -v my_volume:/data ubuntu
Другие расширения