Ответ
Docker обеспечивает изоляцию на уровне процессов, а не на уровне аппаратной виртуализации. Контейнеры разделяют ядро операционной системы хоста, что делает их легковесными и быстрыми, но создаёт определённые риски безопасности.
Механизмы изоляции и их ограничения:
- Namespaces: Изолируют представление процессов, сети, пользователей и файловой системы для контейнера. Однако, при наличии уязвимостей в ядре, возможен "breakout" из namespace.
- Control Groups (cgroups): Ограничивают и отслеживают использование ресурсов (CPU, память, I/O).
- Общее ядро: Это главное отличие от VM. Уязвимость в ядре хоста может скомпрометировать все контейнеры.
Пример риска: Запуск контейнера с флагом --privileged или монтированием чувствительных точек монтирования (/dev, /sys) даёт ему почти неограниченный доступ к хосту.
docker run --rm -it --privileged ubuntu bash
# Внутри контейнера можно попытаться получить доступ к хосту
Меры усиления безопасности: Для production-сред требуются дополнительные инструменты:
- AppArmor / SELinux: Профили для ограничения возможностей контейнера.
- Seccomp: Ограничение системных вызовов, доступных контейнеру.
- User Namespaces: Маппинг root-пользователя контейнера на непривилегированного пользователя на хосте.
- Альтернативные runtime:
gVisor(прослойка-псевдоядро) илиKata Containers(легковесные VM) для более строгой изоляции.