hostprofi.ru
Подобрать хостинг
Термин·буква К

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

краткое определение

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

Контейнеризация отличается от классической виртуализации тем, что контейнеры не содержат собственного ядра ОС — они используют ядро хостовой системы. Это делает их значительно легче: контейнер Docker стартует за 100–300 мс, тогда как виртуальная машина загружается 30–60 секунд. На одном физическом сервере умещается в 10–20 раз больше контейнеров, чем полноценных VM.

Как работает

Изоляция контейнеров обеспечивается двумя механизмами Linux-ядра: namespaces (изолируют PID, сеть, файловую систему, пользователей) и cgroups (ограничивают потребление CPU, RAM, дискового I/O). Docker — наиболее популярный runtime для контейнеров — добавляет образы (images) с версионированием слоёв и реестры (Docker Hub, Harbor) для распределения образов.

Типичный рабочий процесс: разработчик пишет Dockerfile, описывающий окружение приложения. CI/CD-система собирает образ и публикует в реестр. Сервер загружает образ и запускает контейнер. Docker Compose управляет несколькими контейнерами (приложение + база данных + кэш). Для production-масштабирования используется Kubernetes.

История

Технологии изоляции существовали давно: FreeBSD jails — с 2000 года, Linux OpenVZ — с 2005. Революцию произвёл Docker, публично анонсированный в марте 2013 года на конференции PyCon. В 2014 году Google открыла проект Kubernetes (основан на внутренней системе Borg). В 2015 году создан Open Container Initiative (OCI) для стандартизации форматов контейнеров.

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

ПараметрКонтейнерВиртуальная машина
Время запуска100–300 мс30–60 сек
Размер образа10–200 МБ2–20 ГБ
ИзоляцияОбщее ядроПолная (отдельное ядро)
Накладные расходы1–3%5–15%

На что обращать внимание

Контейнеры разделяют ядро хоста — уязвимость в ядре затрагивает все контейнеры. Для security-критичных задач используют гипервизорную изоляцию (Kata Containers, gVisor) или комбинируют: контейнеры внутри KVM-машин. Персистентные данные в контейнерах хранят в volumes — при удалении контейнера данные в volume сохраняются.

Как работает

Контейнер создаётся из образа (image) — неизменяемого слоя файловой системы. При запуске контейнера поверх образа добавляется тонкий записываемый слой. Внутри контейнер видит изолированное пространство имён (namespace): собственный PID, сетевой стек, файловую систему. Ограничение ресурсов обеспечивают cgroups (control groups) Linux — механизм ядра, позволяющий выставить лимиты CPU и RAM для группы процессов. Контейнеры на одном хосте разделяют ядро ОС, что делает их значительно легче виртуальных машин.

Отличия от виртуализации

Контейнер запускается за доли секунды (10–100 мс) против 30–60 секунд для виртуальной машины. Оверхед по памяти контейнера — 5–20 МБ против 256 МБ+ для минимальной ВМ. Однако контейнеры менее изолированы: уязвимость в ядре хоста компрометирует все контейнеры. KVM-виртуализация обеспечивает аппаратную изоляцию. Для задач, где безопасность критична (multi-tenant хостинг), ВМ предпочтительнее. Для DevOps-пайплайнов и микросервисов контейнеры — стандарт индустрии с 2015 года.

История

Контейнеризация началась с OpenVZ и FreeBSD Jails в начале 2000-х. Docker выпущен в 2013 году и стандартизировал контейнерный формат. В 2014 году Google открыла Kubernetes — систему оркестрации контейнеров. В 2016 году OCI (Open Container Initiative) стандартизировал форматы образов. К 2020 году Kubernetes стал де-факто стандартом для production-деплоя контейнеров. LXC и LXD — системные контейнеры для более «тяжёлых» окружений.

На что обращать внимание

При выборе хостинга с поддержкой контейнеров: убедитесь, что хостер разрешает запуск Docker (некоторые shared-хостинги запрещают). На VPS нужно минимум 2 ГБ RAM для комфортного запуска нескольких контейнеров с Docker Compose. Проверяйте версию Docker Engine — Docker 24+ поддерживает BuildKit по умолчанию, что ускоряет сборку образов в 2–3 раза.

Другие термины