Что используется внутри Docker-контейнера?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Docker-контейнер использует ряд технологий для изоляции процессов и ресурсов:
-
Namespaces ядра Linux: Предоставляют изоляцию для различных системных ресурсов, таких как:
- PID (Process ID): Изолируют процессы.
- Net (Network): Изолируют сетевой стек.
- Mount (mnt): Изолируют точки монтирования файловой системы.
- UTS (Unix Timesharing System): Изолируют имя хоста и доменное имя.
- IPC (Interprocess Communication): Изолируют механизмы межпроцессного взаимодействия.
- User (User & Group ID): Изолируют идентификаторы пользователей и групп.
-
Control Groups (cgroups): Управляют и ограничивают использование аппаратных ресурсов для процессов внутри контейнера, включая:
- CPU: Ограничение использования процессорного времени.
- Memory: Ограничение использования оперативной памяти.
- Block I/O: Ограничение пропускной способности дискового ввода-вывода.
- Net I/O: Ограничение пропускной способности сетевого ввода-вывода.
-
Union File Systems: Предоставляют собой объединенную файловую систему, состоящую из нескольких слоев. Docker использует такие файловые системы как OverlayFS, AUFS, Btrfs, ZFS. Это позволяет эффективно управлять хранением образов и создавать слои только для изменений.
-
Процесс Docker Daemon: Управляет жизненным циклом контейнеров (создание, запуск, остановка, удаление).
-
Container Runtime: Низкоуровневое исполнение контейнера. Docker в разное время использовал и поддерживает различные рантаймы, такие как
runc(спецификация OCI),containerd. -
Образ контейнера: Набор слоев файловой системы и метаданных, необходимых для запуска приложения.
-
Приложение: Исполняемый код, библиотеки, зависимости и конфигурационные файлы, составляющие саму программу, которая работает внутри контейнера.
По сути, контейнер — это изолированный процесс (или набор процессов), работающий в ограниченной среде, предоставляемой ядром Linux и управляемой Docker.