Опишите архитектуру Docker
Docker использует клиент-серверную архитектуру, состоящую из нескольких компонентов.
Docker Daemon (dockerd)
Серверный процесс, который управляет Docker-объектами: образами, контейнерами, сетями и томами. Daemon слушает запросы через Docker API (REST API по Unix-сокету или TCP). Он отвечает за сборку образов, запуск контейнеров, управление сетями и хранением.
Docker Client (docker)
Основной интерфейс для взаимодействия пользователя с Docker. Когда пользователь вводит команду вроде docker run, клиент отправляет соответствующий запрос к Docker Daemon через Docker API. Клиент может работать с удалённым daemon.
Docker Engine
Общее название для комбинации Docker Daemon, REST API и CLI-клиента. Docker Engine бывает двух редакций:
- Docker Engine Community (CE) — бесплатная версия.
- Docker Engine Enterprise (EE) — коммерческая версия с дополнительными функциями.
Containerd
Среда выполнения контейнеров (container runtime), которую Docker использует внутри для управления жизненным циклом контейнеров. Containerd отвечает за загрузку образов, запуск и остановку контейнеров.
Схема взаимодействия
Пример
Docker Client (CLI)
│
│ REST API
▼
Docker Daemon (dockerd)
│
▼
Containerd → runc (создание контейнеров)
│
▼
Контейнеры, Образы, Тома, Сети
На собеседовании: важно показать, что Docker — это не монолит, а клиент-серверная архитектура. CLI-клиент общается с daemon через REST API, а daemon делегирует запуск контейнеров containerd/runc. Знание этой цепочки показывает понимание того, как работает Docker на уровне процессов.