Контейнер — что это, чем отличается от ВМ и как работает | Глоссарий FREEHOSTING

Контейнер

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

Определение простыми словами

Контейнер — это упакованное приложение со всеми зависимостями, которое работает на любом сервере с той же архитектурой. Внутри собственная корневая ФС, свой 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-приложения).