Определение простыми словами
Контейнер — это упакованное приложение со всеми зависимостями, которое работает на любом сервере с той же архитектурой. Внутри собственная корневая ФС, свой PID-1, свой сетевой стек. Снаружи — обычный процесс, разделяющий ядро Linux с десятками других контейнеров.
В отличие от виртуальной машины, контейнер не эмулирует железо: вместо гипервизора используются механизмы ядра — namespaces (изоляция) и cgroups (квоты CPU/RAM/IO). Запуск занимает 50–200 мс, образ весит от 5 МБ. Самый известный движок — Docker, low-level рантайм — runc/containerd, оркестратор — Kubernetes.
Сравнение
| Параметр | Контейнер | Виртуальная машина |
|---|---|---|
| Изоляция | namespaces + cgroups | гипервизор + эмуляция |
| Ядро | общее с хостом | собственное |
| Запуск | 50–500 мс | 20–60 секунд |
| Размер образа | 5 МБ – 1 ГБ | 1–20 ГБ |
| Накладные расходы | 1–3% CPU | 5–15% CPU |
| Плотность на хост | сотни | десятки |
| Безопасность | средняя (одно ядро) | высокая (раздельные ядра) |
Кейсы использования
- Микросервисная архитектура: каждый сервис в своём контейнере с собственной версией зависимостей.
- CI/CD: тесты прогоняются в чистом контейнере, который удаляется после сборки.
- Локальная разработка: команда поднимает Postgres + Redis + бэкенд одной командой
docker compose up. - Размещение Telegram-бота, парсера или скрипта на VPS — компактный образ + автозапуск через systemd.
- Негативный сценарий: запуск контейнера от root и пробрасывание
/var/run/docker.sockвнутрь — компрометация контейнера = root на хосте. Лечится rootless-режимом и user namespaces.
Технические детали
# Запуск контейнера с лимитами на CPU и память
docker run -d --name api
--cpus="1.5" --memory="512m"
-p 8080:8080
-v $(pwd)/data:/app/data
myorg/api:1.4.2
# Посмотреть процессы внутри
docker top api
# Изоляция в чистом виде через runc + namespaces
sudo unshare --pid --net --mount --uts --ipc --fork
chroot /opt/rootfs /bin/sh
# Бэкап образа
docker save myorg/api:1.4.2 | gzip > api-1.4.2.tar.gz
Стек обычно дополняет реестр (Harbor, GHCR) и оркестратор. Подробнее о среде запуска — в статьях про Docker и LXC.
🔥 Где это применяется
Частые вопросы
Контейнер и Docker — это одно и то же?
Нет. Контейнер — концепция изоляции процесса средствами ядра. Docker — один из движков, который собирает образы и запускает контейнеры. Альтернативы: Podman, containerd, LXC.
Можно ли запустить Windows-контейнер на Linux?
Нельзя: контейнеры разделяют ядро с хостом. Windows-контейнеры работают только на Windows Server. Под видимостью «Docker for Windows» крутится Linux-VM.
Сколько контейнеров можно запустить на одном VPS?
Зависит от их прожорливости. На VPS 4 vCPU / 8 ГБ RAM спокойно живут 30–50 лёгких контейнеров (бот, кэш, прокси) или 5–10 тяжёлых (СУБД, Java-приложения).