Wiki
Виртуализация

Контейнеры — что это простыми словами

Контейнер — легковесная изоляция процесса через Linux namespaces + cgroups. Не гипервизор — все контейнеры делят ядро. Основа Docker, k8s. Быстрее VM на порядок.

Контейнер — изолированный процесс на 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, безопаснее.

Частые вопросы

Docker vs VM для production?
Docker для микросервисов и CI/CD. VM (KVM) — для изоляции между тенантами (VPS-хостинг). У нас гибрид: VPS = KVM, внутри VPS клиент ставит Docker.
Насколько безопасны контейнеры?
Достаточно для однопользовательских workload (ваши сервисы в вашем VPS). Multi-tenant Docker без gVisor / Kata — риск.

Смотрите также