Контейнер — изолированный процесс на Linux, ограниченный namespaces (свой PID/network/mount/user-неймспейс — контейнер не видит процессы хоста) и cgroups (лимиты CPU/RAM/IO). В отличие от VM, контейнер не имеет собственного ядра — использует ядро хоста через syscalls.
Преимущества над VM: (1) старт за 100 мс vs 10-30 с VM, (2) overhead практически нулевой (обычный процесс), (3) плотность — 100+ контейнеров на VPS 4 ГБ, VM — единицы. (4) образ 100 МБ vs 2-10 ГБ VM. Недостатки: (1) все контейнеры делят ядро — если ядерный exploit, все под угрозой, (2) нельзя запустить Windows-контейнер на Linux-хосте.
Runtime'ы: runc (эталонная реализация OCI runtime), containerd (Docker, k3s), CRI-O (Kubernetes), crun (Rust-переписка runc, быстрее в 2 раза). Все совместимы через OCI стандарт.
Практика: Docker — самая известная обёртка над containerd + tooling (build, push, compose). Kubernetes — orchestrator для распределения контейнеров по кластеру серверов. Rootless-контейнеры (podman) — контейнер запускается без root, безопаснее.