
Я бы не сказал, что это прям частый вопрос на собеседованиях. Изначально в моей базе знаний такого вопроса в принципе не было, но недавно его задали моему ученику. Я пошёл разбираться, чтобы написать короткий и понятный ответ.
Спойлер: короткий ответ найден не был. А чтобы он стал понятным — я создал это практическое задание.
<aside>
</aside>
<aside>
Прежде чем начать практическую часть, давай поговорим о теоретической. Если тебе понятно что такое dockerd, containerd, shim, runs, то можешь сразу переходить к практике — 2. Практическая часть.
</aside>
Docker Daemon (dockerd) — это фоновый процесс, который управляет всем, что связано с Docker на твоей системе:
docker run, docker pull, docker stop;По сути, это "сердце" Docker, которое обрабатывает команды и управляет контейнерами, делегируя низкоуровневые операции через containerd.
Это компоненты, делающие пыльную работенку по приказу докер демона. Вместо тысячи слов, давай посмотрим на схему:
dockerd # Докер демон (PPID=1)
└─ containerd # Управляет образами + жизненный цикл контейнеров (PPID=1)
└─ containerd-shim # На каждый контейнер свой экземпляр
└─ runc (временно) # Создаёт namespaces → выходит
└─ nginx … # PID=1 внутри контейнера
А вот более подробная схема с описанием того, что происходит. Можешь пока сильно не вчитываться и просто примерно прикинуть что к чему, куда-чего. Потом вернёшься к иллюстрации, с лучшим пониманием происходящего.

https://iximiuz.com/en/posts/implementing-container-runtime-shim/