Ответ
Docker — это платформа контейнеризации, построенная на нескольких ключевых технологиях ядра Linux, которые обеспечивают изоляцию и управление ресурсами.
Основные технологии:
- Linux Namespaces — обеспечивают изоляцию процессов, сети, файловой системы и других ресурсов. Каждый контейнер получает собственные пространства имён (PID, NET, MNT, IPC, UTS, User).
- Control Groups (cgroups) — ограничивают и отслеживают использование ресурсов (CPU, память, дисковый I/O, сеть) для группы процессов.
- Union File Systems (OverlayFS, AUFS) — позволяют создавать образы из накладывающихся слоёв (read-only слои базового образа + read-write слой контейнера), что обеспечивает эффективность и лёгкость образов.
- Container Runtime (runc) — низкоуровневая реализация контейнеров, соответствующая спецификации Open Container Initiative (OCI). Именно runc создаёт и запускает контейнеры, используя namespaces и cgroups.
Пример Dockerfile, который использует эти технологии:
# Базовый слой образа (использует UnionFS)
FROM alpine:latest
# Команда, выполняемая в изолированном процессе (namespace)
RUN apk add --no-cache nginx
# Точка входа для контейнера
CMD ["nginx", "-g", "daemon off;"]
Эти технологии вместе позволяют Docker создавать переносимые, изолированные и ресурсоэффективные среды выполнения приложений.