Контейнер полезно рассматривать как изолированную и ограниченную среду для процессов. В Linux пространства имён дают изоляцию, cgroups ограничивают ресурсы, а механизмы прав и фильтрации системных вызовов сужают доступ процесса. Программа runc подготавливает такую среду и запускает в ней процесс.
Затем стоит разобрать образы, containerd, Docker и оркестраторы. Для запуска runc достаточно каталога с
config.json, исполняемым файлом и зависимостями. Образы нужны, чтобы экономить место и распространять файловые системы.Практический порядок: запустить контейнер через runc, разобрать образ и containerd, затем связать эти слои с Docker и Kubernetes. Статья Learning Containers From The Bottom Up собирает маршрут и ссылки на углублённые разборы.
