Архитектура 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Другие расширения