System Design Space
Граф знанийНастройки

Обновлено: 18 апреля 2026 г. в 06:17

Контейнеризация

средний

Как контейнеры разделяют ядро хоста, из чего собираются образы, как работают лимиты ресурсов и чем контейнеры отличаются от VM.

Глава про контейнеризацию важна тем, что снимает главный миф: контейнер - не «лёгкая виртуальная машина», а способ изолировать и доставлять процесс поверх общего ядра.

В реальной работе она помогает понимать, как пространства имён, группы управления ресурсами, слоёная файловая система и образ приложения превращаются в воспроизводимое развёртывание и более предсказуемое поведение сервиса.

В интервью и архитектурных обсуждениях материал даёт зрелое объяснение, где контейнеры действительно упрощают платформу, а где только добавляют новый слой эксплуатационной сложности.

Практическая польза главы

Примитивы контейнеризации

Формирует понимание пространств имён и групп управления ресурсами как основы изоляции и контроля ресурсов.

Консистентность развёртывания

Помогает снижать дрейф окружений между локальной разработкой и рабочей средой.

Операционные ограничения

Учит учитывать ограничения контейнерной модели: работу с состоянием, сетевой слой, наблюдаемость и безопасность.

Готовность к интервью

На интервью помогает уверенно объяснять, где контейнеры усиливают архитектуру, а где добавляют сложность.

Источник

Containerization

Определение контейнеризации и ключевые принципы.

Перейти на сайт

Что такое контейнеризация

Контейнеризация важна не потому, что «заменяет VM», а потому что превращает запуск процесса в воспроизводимую платформенную единицу. Она ускоряет поставку, но не отменяет цену общего ядра, сетевого слоя и лимитов ресурсов.

в современном смысле строится на сочетании и : процесс остаётся в общем ядре хоста, но получает собственные границы по сети, файлам и ресурсам.

Поверх этого работают , которые запускают процесс из , скачанного из . Сама упаковка опирается на и механизм , поэтому слои переиспользуются, а новые контейнеры стартуют быстро. При этом контейнерная среда выполнения не отменяет внутреннюю самого приложения.

Контейнер не стирает границу между и . Поэтому лимиты памяти, реакция на , выбор между обычным и , поддержка стандарта , интеграция через и требования к , , , эффекту и определяют, где контейнеры действительно упрощают платформу, а где добавляют новый слой операционной ответственности.

Базовые механизмы контейнеризации

  • Пространства имён изолируют процессы, сеть, файловую систему и пользователей.
  • Группы управления ресурсами ограничивают и распределяют CPU, память, ввод-вывод и число процессов.
  • Слоёная файловая система собирает образ из переиспользуемых слоёв и ускоряет запуск контейнера.
  • Контейнерная среда выполнения создаёт контейнер, запускает процесс и завершает его жизненный цикл.
  • Реестр контейнерных образов помогает переносить приложение между окружениями без ручной пересборки.
Хост-система Linux
Физические ресурсы
CPURAMДискСетевая карта
Контейнерная среда выполнения

Контейнерная среда выполнения настраивает пространства имён и группы управления ресурсами, запускает процессы и применяет лимиты.

Контейнеры на хосте

Изоляция за счёт пространств имён и групп управления ресурсами

Контейнер A

  • Nginx
  • Приложение
CPU: 2 ядраRAM: 512 МБВвод-вывод: ограничен

Контейнер B

  • Воркер
  • Очередь
CPU: 1 ядроRAM: 256 МБВвод-вывод: ограничен

Контейнер C

  • База данных
  • Резервное копирование
CPU: 2 ядраRAM: 1 ГБВвод-вывод: приоритетный
Слоёная файловая система (overlay)
Базовый образСлой среды выполненияСлой приложенияСлой записи
Группы управления ресурсами и лимиты

Они ограничивают CPU, память и ввод-вывод для каждого контейнера, чтобы один процесс не забрал все ресурсы хоста.

Общее ядро хоста

Все контейнеры разделяют ядро хоста, поэтому контейнеризация обычно легче и быстрее виртуальных машин, но требует совместимого ядра.

Слоёная файловая система контейнеров

Контейнерный образ собирается из нескольких слоёв, а сам контейнер добавляет сверху собственный слой записи.

  • Базовый слой: минимальный образ ОС или базовая среда выполнения.
  • Промежуточные слои: зависимости, библиотеки и конфигурация.
  • Верхний слой: код приложения и его артефакты.
  • Слой записи: изменения, которые появляются только у конкретного контейнера.

Визуальная модель слоёной файловой системы

У каждого контейнера есть свой слой записи, а слои образа только для чтения переиспользуются.

Слои записи контейнеров

Контейнер A: изменения, временные файлы, журналы

RW

Контейнер B: изменения, временные файлы, журналы

RW
Общие слои образа

Слой приложения

RO

Код приложения и статические артефакты.

Слой зависимостей

RO

Библиотеки, среда выполнения и системные пакеты.

Слой базового образа

RO

Минимальная ОС или базовая среда выполнения.

Копирование при записи

При записи меняется только слой записи конкретного контейнера. Базовые слои образа не переписываются.

Кэш слоёв

Нижние слои часто кэшируются между сборками, поэтому изменения в верхних слоях собираются и деплоятся быстрее.

Группы управления ресурсами (cgroups) и лимиты

  • Ограничения CPU: квоты и веса для процессов контейнера.
  • Ограничения памяти: жёсткие пределы и реакция системы на нехватку памяти.
  • Ограничения ввода-вывода: контроль дисковых операций и приоритетов.
  • Ограничения по числу процессов: защита хоста от бесконтрольного роста PID.

Контейнеры и виртуальные машины

Связанная глава

Виртуализация: гипервизоры и VM

Гипервизоры, типы виртуализации и сценарии, где VM лучше контейнеров.

Открыть главу

Контейнеры

  • Разделяют ядро хоста, поэтому запускаются быстро.
  • Дают меньшие накладные расходы и более высокую плотность размещения.
  • Требуют совместимого ядра и разделяют его с соседними контейнерами.

Виртуальные машины (VM)

  • Каждая VM работает со своей гостевой операционной системой.
  • Дают более жёсткую изоляцию, но платят за это большими накладными расходами.
  • Лучше подходят для разных ОС и строгих границ безопасности.

Таймлайн контейнерной эволюции

2008

LXC в Linux

LXC объединяет пространства имён и группы управления ресурсами в прикладной формат и делает Linux-контейнеризацию массово применимой.

2013

Docker делает контейнеры массовыми

Docker упрощает работу с контейнерами: слои образа, Dockerfile и реестр образов делают сборку и доставку воспроизводимыми для разработчиков и платформенных команд.

2015

OCI стандартизирует форматы

Open Container Initiative закрепляет спецификации образов и сред выполнения, чтобы экосистема не зависела от одного вендора.

2016

CRI в Kubernetes

Kubernetes вводит Container Runtime Interface и отделяет оркестратор от конкретной контейнерной среды выполнения.

2017–2022

containerd, CRI-O и отказ от dockershim

Контейнерные среды выполнения становятся зрелыми, Kubernetes переходит на прямую работу через CRI, а dockershim уходит из стандартного пути.

2023+

Эра безопасных и специализированных сред выполнения

Для мультиарендных и чувствительных к безопасности нагрузок усиливается интерес к gVisor, Kata Containers и подходам на базе microVM.

Как тип виртуализации влияет на контейнеры

Полная виртуализация

  • Где сильна: Максимальная совместимость гостевых ОС.
  • Влияние на контейнеры: Больше накладных расходов на ввод-вывод и CPU для контейнерных узлов внутри VM.
  • Типичный сценарий: Сценарии совместимости и смешанные среды с разными ОС.

Паравиртуализация

  • Где сильна: Оптимизированные драйверы для сети и диска.
  • Влияние на контейнеры: Лучше баланс задержки и пропускной способности для контейнерных нагрузок внутри VM.
  • Типичный сценарий: Облачные VM с паравиртуализированными драйверами вроде virtio, VMXNET3 и PVSCSI.

Аппаратно-ускоренная

  • Где сильна: Стандартная модель для рабочих кластеров.
  • Влияние на контейнеры: Даёт лучший баланс изоляции и производительности для Kubernetes и контейнерных платформ.
  • Типичный сценарий: Основной путь в публичных облаках и корпоративных дата-центрах.

Какие решения используют сегодня

Среды выполнения и базовый слой

  • containerd и CRI-O — основные среды выполнения для Kubernetes через CRI.
  • runc и crun — распространённые OCI-исполнители контейнеров.
  • gVisor и Kata Containers усиливают изоляцию в мультиарендных средах.

Разработка и локальная эксплуатация

  • Docker Desktop — самый распространённый локальный стек.
  • Podman Desktop — подход без отдельного демона и сценарии без привилегий root.
  • Colima и OrbStack (macOS) — альтернативы для локальных Linux VM и контейнеров.

Оркестрация и платформенный уровень

  • Kubernetes — индустриальный стандарт оркестрации контейнеров.
  • Nomad и Docker Swarm — более компактные альтернативы для части сценариев.
  • Управляемый Kubernetes в AWS, GCP и Azure лежит в основе многих рабочих платформ.

Как запрос доходит до Nginx в контейнере

В контейнерной модели нет отдельного гипервизора между приложением и ядром хоста, но остаются сетевой мост, пространства имён, таблицы NAT и ограничения ресурсов. Поэтому путь запроса короче, чем в VM, но не становится «магически простым».

Путь запроса до Nginx в контейнере

Путь запроса: интернет → хост → контейнерная среда выполнения → контейнер

Внешний контур

Слой 1
КлиентИнтернет

Хост Linux

Слой 2
Сетевая картаСетевой стек ядра

Контейнерная среда выполнения

Слой 3
Сетевой мост/NATПространства имён

Контейнер

Слой 4
NginxПриложение

Сервис

Слой 5
HTTP-обработчикБизнес-логика
Путь запроса

Активный шаг

Нажмите «Старт», чтобы пройти путь запроса.

Почему это важно для системного дизайна

  • Контейнеры ускоряют поставку и уменьшают дрейф между локальной разработкой, тестовой средой и рабочим окружением.
  • Понимание групп управления ресурсами помогает выставлять лимиты и снижать эффект шумного соседа.
  • Сетевая модель контейнеров влияет на задержку, наблюдаемость и правила безопасности.
  • Во многих современных платформах контейнер стал базовой единицей развёртывания и масштабирования.

Практический вывод

  • Контейнер не заменяет понимание операционной системы: он лишь делает запуск процесса более воспроизводимым.
  • Если важны скорость поставки и единый способ упаковать сервис, контейнеры помогают очень сильно.
  • Если важнее максимальная изоляция, другая ОС или жёсткие границы безопасности, стоит смотреть на VM или защищённые среды выполнения.

Связанные главы

Чтобы отмечать прохождение, включи трекинг в Настройки