Теперь мы можем запускать контейнеры, просто установив runC, т.е. вообще не устанавливая Docker, если другие его функции нам не требуются. Но обычно на наших контейнерных хостах нам требуется не только запускать контейнеры, но и управлять ими. Поэтому от докера отделился другой компонент, известный как containerd. Именно он стал управлять runC, которая, в свою очередь, использует libcontainer для работы тех механизмов Linux, что мы привыкли называть docker-контейнер.

Ок, но здесь остался вопрос, что произойдет, когда сам управляющий dockerd отключается или перезапускается? Что будет с запущенными контейнерами? Они не смогут работать. Нужно чтобы кто-то позаботился о них. Чтобы справиться с этой ситуацией, был добавлен новый компонент с названием containerd-shim, который делает контейнеры daemonless. Таким образом, вместо того, чтобы containerd создавал контейнеры, это делает обертка containerd-shim, которая контролирует состояние контейнера. Даже если демон Docker выключается или перезапускается, контейнеры работают в фоновом режиме, и они снова подключаются, когда демон возвращается.