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

Контейнер

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

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

Контейнер — лёгкая форма виртуализации на уровне ОС. В отличие от виртуальных машин, контейнеры не имеют собственного ядра — они используют ядро хост-системы, но изолированы через механизмы Linux: namespaces (пространства имён) и cgroups (контрольные группы). Контейнер запускается за 0,1–1 секунду и занимает 5–100 МБ против 30–90 секунд и 200–1000 МБ для VM.

Как работает контейнер

Linux предоставляет несколько типов namespaces: pid (изоляция процессов), net (сетевой стек), mnt (точки монтирования), uts (имя хоста), ipc (IPC-примитивы), user (UID/GID-маппинг). Каждый контейнер получает свои пространства имён — его процессы, сетевые интерфейсы и файловая система невидимы снаружи.

cgroups (контрольные группы) ограничивают ресурсы: CPU (максимальный % использования), RAM (hard limit, при превышении — OOM kill), блочный I/O (iops/bps limit), сеть. Docker управляет и namespaces, и cgroups автоматически при запуске контейнера через docker run.

Виды контейнеров

  • Системные контейнеры (LXC/LXD, OpenVZ) — эмулируют полноценную ОС с init-системой, cron, SSH. Аналог VM, но без отдельного ядра.
  • Контейнеры приложений (Docker, containerd) — один процесс на контейнер, иммутабельный образ, stateless-архитектура.
  • Pod (Kubernetes) — группа контейнеров с общим сетевым пространством и хранилищем.

История контейнеров

Изоляция процессов через chroot появилась в UNIX в 1979 году. FreeBSD Jails (2000) — первая полноценная контейнерная система. Solaris Zones (2004) — контейнеры для Solaris. Linux-specific LXC (Linux Containers) появился в 2008 году с объединением cgroups (Google, 2007) и namespaces в ядре. Docker (2013, Solomon Hykes, dotCloud) революционизировал работу с контейнерами: стандартизированный формат образов, реестр Docker Hub, простой CLI. Kubernetes (2014, Google) добавил оркестрацию контейнеров на кластерах.

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

ПараметрКонтейнерВиртуальная машина
Изоляция ядраОбщее ядро хостаОтдельное ядро каждой VM
Время запуска0,1–1 сек30–90 сек
Размер образа5–500 МБ1–50 ГБ
Overhead1–3%5–15%
Безопасность изоляцииНиже (общее ядро)Выше (hypervisor)

Безопасность контейнеров

Общее ядро — главное ограничение безопасности контейнеров: уязвимость kernel escape позволяет выбраться из контейнера на хост. Меры защиты: Seccomp (фильтр системных вызовов, Docker применяет по умолчанию), AppArmor/SELinux-профили, rootless containers (контейнер работает без root-прав на хосте), read-only файловые системы для контейнеров. Kata Containers — каждый контейнер запускается в lightweight VM с отдельным ядром, сочетая безопасность VM и скорость контейнеров. Docker --cap-drop ALL снимает все Linux capabilities — принцип наименьших привилегий.

Контейнеры и оркестрация

Kubernetes — де-факто стандарт для запуска контейнеров в production: автоматический scheduling (размещение контейнеров на узлах), self-healing (перезапуск упавших), autoscaling (HPA, VPA, Cluster Autoscaler), service discovery и load balancing через kube-proxy. Docker Compose — для разработки и небольших инсталляций: docker-compose up -d запускает несколько контейнеров со связями и volumes. Podman — rootless-альтернатива Docker от Red Hat, не требует демона с root-правами, drop-in replacement для большинства случаев.

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