Что такое containerd и какова его роль в экосистеме контейнеров?

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

Ответ

containerd — это высокоуровневая, промышленная среда выполнения контейнеров (container runtime), отвечающая за весь жизненный цикл контейнера: управление образами, выполнение контейнеров, хранение, управление сетями низкого уровня и контрольными группами (cgroups).

Его место в архитектуре: containerd находится «под капотом» Docker и является стандартным runtime для Kubernetes через интерфейс CRI (Container Runtime Interface).

[Docker CLI]  или  [kubelet]  (Высокоуровневое управление)
        |                    |
    [dockerd]           [CRI Plugin (containerd-shim)]
        |                    |
    [containerd]  <---  ЯДРО (core) ---> [runc]
        |                              (запуск контейнера)
    [runc]  (низкоуровневый runtime, создает контейнеры)

Ключевые функции containerd:

  • Управление образами: Загрузка, проверка и хранение OCI-совместимых образов из реестров (Docker Hub, private registry).
  • Выполнение контейнеров: Создание, запуск, остановка, пауза и удаление контейнеров.
  • Управление хранилищем: Работа со слоями образов через snapshotters (overlayfs, zfs).
  • Управление сетью: Создание сетевых пространств имен (network namespaces) для контейнеров через CNI-плагины.

Практическое использование через ctr (встроенный CLI-инструмент для отладки):

# Загрузить образ Nginx из Docker Hub
ctr image pull docker.io/library/nginx:alpine

# Запустить контейнер из этого образа с именем 'my-nginx'
ctr run --rm -t docker.io/library/nginx:alpine my-nginx

# Посмотреть список запущенных контейнеров
ctr containers list

# Посмотреть список загруженных образов
ctr images list

Почему containerd важен для DevOps?

  1. Стандартизация: Он реализует спецификацию OCI (Open Container Initiative), что обеспечивает переносимость контейнеров.
  2. Производительность и стабильность: Это легковесный, сфокусированный демон, который стал отраслевым стандартом для оркестраторов.
  3. Интеграция с Kubernetes: Начиная с версии 1.24, Kubernetes удалил встроенную поддержку Docker в пользу runtimes, совместимых с CRI, таких как containerd (или CRI-O).
  4. Модульность: Позволяет использовать различные компоненты (например, разные snapshotters для оптимизации хранилища) без изменения высокоуровневых инструментов.

Отличие от Docker Engine: Docker — это целостная платформа, включающая CLI, демон (dockerd), API, инструменты сборки образов (Dockerfile) и оркестрации (Docker Compose/Swarm). containerd — это лишь один из его компонентов, отвечающий за core runtime-операции, который может использоваться независимо.