Схема взаимодействия контейнерных технологий в рамках работы с привычными инструментами может быть представлена так:
1️⃣Утилита
podman с помощью Libpod API обращается к библиотеке libpod, которая вызывает низкоуровневый container runtime (по умолчанию утилиту runc)containers/podman
Podman Commands
2️⃣Утилита
docker с помощью Docker API вызывает сервис dockerddocker/cli
Docker CLI reference
Docker architecture
Docker API
3️⃣Сервис
dockerd вызывает сервис containerdDockerd reference
4️⃣Сервис
containerd вызывает низкоуровневый container runtime (по умолчанию утилиту runc)containerd/containerd
Containerd Scope and principles
5️⃣Сервис
kubelet с помощью протокола CRI вызывает сервис container runtime (например, containerd или crio)Container Runtime Interface
Container Runtimes
CRI: the Container Runtime Interface
6️⃣Сервис
containerd вызывает низкоуровневый container runtime (по умолчанию runc)Containerd CRI
7️⃣Сервис
cri-o вызывает низкоуровневый container runtime (по умолчанию runc)cri-o/cri-o
8️⃣Утилита OCI
container runtime (по умолчанию runc):🔘
runc с помощью библиотеки libcontainer создает контейнер по runtime-spec, взаимодействуя с подсистемами ядра Linux – пространствами имен (namespaces) и контрольными группами (cgroups)opencontainers/runc
runc man
opencontainers/runc/libcontainer
🔘
crun создает контейнер по runtime-spec, взаимодействуя с подсистемами ядра Linux – пространствами имен (namespaces) и контрольными группами (cgroups)containers/crun
@DevOPSitsec
