Источник
Containerization
Определение контейнеризации и ключевые принципы.
Контейнеризация — это виртуализация на уровне ОС: приложения изолируются, но разделяют ядро хоста. Это делает контейнеры лёгкими, быстрыми и удобными для масштабирования.
Как устроена контейнеризация
- Namespaces изолируют процессы, сеть, файловую систему и пользователей.
- Cgroups ограничивают и распределяют CPU, память, I/O и количество процессов.
- Union/overlay FS обеспечивает слои образов и быстрый запуск контейнеров.
- Container runtime управляет жизненным циклом контейнеров (create/start/stop).
- Registry и образы позволяют переносить приложения между окружениями.
runtime управляет namespaces и cgroups, запускает контейнеры и ограничивает ресурсы.
Containers inside host
Isolation via namespaces + cgroupsContainer A
- Nginx
- App
Container B
- Worker
- Queue
Container C
- DB
- Backup
Контролируют CPU, память и I/O для каждого контейнера, не позволяя одному процессу съесть все ресурсы.
Все контейнеры разделяют ядро хоста, поэтому контейнеризация легче и быстрее VM, но требует совместимого ядра.
Слоенная файловая система
Образы контейнеров строятся из нескольких слоев, а контейнер добавляет свой writable слой.
- Базовый слой: минимальный образ ОС или runtime.
- Промежуточные слои: зависимости, библиотеки, конфигурации.
- Верхний слой: приложение и его файлы.
- Writable layer: изменения на уровне конкретного контейнера.
Такой подход ускоряет сборку и деплой: общий слой можно переиспользовать, а изменения затрагивают только верхние слои.
Cgroups и limits
- CPU limits: квоты/шары для процессов контейнера.
- Memory limits: жесткие пределы и OOM-killer.
- IO limits: контроль дисковых операций.
- PIDs limits: ограничение количества процессов.
Контейнеры vs виртуальные машины
Контейнеры
- Разделяют ядро хоста, поэтому стартуют быстро.
- Меньше накладных расходов и выше плотность размещения.
- Требуют совместимого ядра и делят его с другими контейнерами.
Виртуальные машины
- Каждая VM имеет собственную гостевую ОС.
- Выше изоляция, но больше накладные расходы.
- Подходит для разных ОС и строгих границ безопасности.
Путь запроса к nginx внутри контейнера
Путь запроса схож с виртуальными машинами, но без отдельного гипервизора — контейнер использует ядро хоста.
Путь запроса до nginx в контейнере
Путь запроса: интернет → хост → runtime → контейнер
External
Layer 1Host Linux
Layer 2Container runtime
Layer 3Container
Layer 4Service
Layer 5Активный шаг
Нажмите «Старт», чтобы пройти путь запроса.
Почему это важно для системного дизайна
- Контейнеры ускоряют доставку и упрощают окружения (dev/test/prod).
- Понимание cgroups помогает выставлять лимиты и избегать noisy neighbor.
- Сетевая модель контейнеров влияет на latency и правила безопасности.
- Контейнеры стали базовой единицей деплоя в Kubernetes и облаках.
