Ответ
Docker для изоляции и управления контейнерами опирается на следующие примитивы ядра Linux:
-
Namespaces (Пространства имён): Изолируют глобальные системные ресурсы для каждого контейнера.
PID: Изолирует дерево процессов.NET: Изолирует сетевые интерфейсы, таблицы маршрутизации, порты.MNT: Изолирует точки монтирования (файловую систему).IPC: Изолирует межпроцессное взаимодействие (очереди, семафоры).UTS: Изолирует hostname и domainname.User: Изолирует UID/GID пространства.
-
cgroups (Control Groups): Ограничивают и отслеживают использование ресурсов.
- Memory:
memory.limit_in_bytes. - CPU:
cpu.shares,cpu.cfs_quota_us. - I/O:
blkio.weight.# Запуск контейнера с ограничениями docker run -it --memory="500m" --cpus="1.5" alpine:latest
- Memory:
-
Union File Systems (OverlayFS): Объединяют несколько слоёв (read-only образ + read-write слой контейнера) в единое представление файловой системы. Это основа для эффективного хранения образов.
-
Capabilities: Разделяют привилегии суперпользователя на отдельные блоки. Docker по умолчанию удаляет многие capabilities у контейнеров для повышения безопасности.
-
seccomp-bpf: Фильтрует системные вызовы, доступные процессам внутри контейнера, ограничивая поверхность атаки.
-
SELinux/AppArmor: Системы принудительного контроля доступа (MAC), которые накладывают дополнительные политики безопасности поверх стандартных разрешений Linux (DAC).