Какие узлы используются для запуска Docker

«Какие узлы используются для запуска Docker» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В контексте Docker под "узлами" (nodes) обычно понимают компоненты архитектуры Docker или элементы оркестратора (например, Docker Swarm или Kubernetes).

1. Базовые компоненты Docker (на одной машине):

  • Docker Daemon (dockerd): Фоновая служба, которая управляет образами, контейнерами, сетями и томами.
  • Docker Client (CLI): Интерфейс командной строки (docker), который через REST API общается с демоном.
  • Docker Registry: Хранилище образов (Docker Hub, GitLab Container Registry, приватные репозитории).

2. Узлы в Docker Swarm (оркестрация):

  • Manager Nodes: Управляющие узлы. Отвечают за состояние кластера, оркестрацию сервисов и хранение конфигурации (Raft-консенсус). Запускаются командой docker swarm init.
  • Worker Nodes: Рабочие узлы. Выполняют задачи (контейнеры), назначенные менеджерами. Добавляются командой docker swarm join.

3. Узлы в Kubernetes (более распространенный случай): Хотя Kubernetes не использует Docker напрямую как runtime, понятие узлов центрально:

  • Control Plane Node (Master): Запускает компоненты управления кластером: kube-apiserver, etcd, kube-scheduler, kube-controller-manager.
  • Worker Node: Запускает пользовательские рабочие нагрузки (поды). На каждом worker node должны быть:
    • Kubelet: Агент, общающийся с Control Plane.
    • Container Runtime: Например, containerd (который теперь является стандартным runtime, пришедшим на смену Docker).
    • Kube-proxy: Обеспечивает сетевое взаимодействие.

Практический пример: Запуск сервиса в Swarm кластере с 1 manager и 2 worker узлами.

# На manager узле
docker swarm init --advertise-addr <MANAGER-IP>
# На worker узлах (команда выводится после init)
docker swarm join --token <TOKEN> <MANAGER-IP>:2377
# Развертывание сервиса
docker service create --replicas 3 --name web -p 80:80 nginx