Ответ
Docker активно использует несколько ключевых технологий ядра Linux для обеспечения изоляции, безопасности и управления ресурсами контейнеров:
-
Namespaces (Пространства имен) — изолируют процессы, сеть, файловую систему, IPC (межпроцессное взаимодействие), UTS (имя хоста) и другие ресурсы, позволяя каждому контейнеру иметь собственное изолированное окружение, не влияющее на хост-систему или другие контейнеры.
- Пример:
unshare --pid --fork --mount-proc
создает новый PID namespace и монтирует новую/proc
.
- Пример:
-
Cgroups (Control Groups) — ограничивают и управляют использованием системных ресурсов (CPU, память, диски, сетевой ввод/вывод) для групп процессов. Это обеспечивает справедливое распределение ресурсов и предотвращает их исчерпание одним контейнером.
- Пример:
cgcreate -g cpu,memory:/mygroup
создает новую группу контроля ресурсов.
- Пример:
-
Union File Systems (Объединяющие файловые системы) — такие как OverlayFS или AUFS, объединяют слои контейнера (образ и слой записи) в единую файловую систему. Это позволяет эффективно использовать дисковое пространство (слои образа доступны только для чтения и могут быть общими) и быстро создавать новые контейнеры.
- Пример монтирования OverlayFS:
mkdir lower upper work merged echo "lower content" > lower/file.txt mount -t overlay overlay -o lowerdir=lower,upperdir=upper,workdir=work merged # Теперь 'merged' содержит 'file.txt' из 'lower'
- Пример монтирования OverlayFS:
-
Seccomp (Secure Computing Mode) — фильтрует системные вызовы (syscalls), которые может выполнять процесс. Docker использует профиль Seccomp по умолчанию, который ограничивает доступ к опасным системным вызовам, повышая безопасность за счет минимизации поверхности атаки.
-
Capabilities (Возможности) — разграничивают привилегии процессов. Вместо предоставления полного root-доступа внутри контейнера, Docker может давать только необходимые возможности (например,
CAP_NET_BIND_SERVICE
для привязки к низким портам), предоставляя гранулярный контроль над действиями процесса.- Пример:
capsh --drop=cap_net_raw -- -c "ping 8.8.8.8"
запретит использованиеping
(требуетCAP_NET_RAW
).
- Пример:
-
iptables/nftables — используются для управления сетевым трафиком, обеспечивая маршрутизацию, NAT (Network Address Translation) и сетевую изоляцию между контейнерами, а также между контейнерами и хостом.
-
containerd/runc — являются низкоуровневыми рантаймами, которые реализуют спецификацию OCI (Open Container Initiative) для запуска и управления жизненным циклом контейнеров.
containerd
управляет полным жизненным циклом контейнера на хосте, аrunc
— это легковесный, переносимый рантайм для запуска контейнеров.
Эти технологии вместе обеспечивают мощную и эффективную платформу для контейнеризации приложений, гарантируя их изоляцию, безопасность и оптимальное использование ресурсов.