🐧 Docker на Linux

Контейнер работает напрямую на ядре хоста Используются namespaces (PID, NET, UTS, IPC, MNT, USER) и cgroups. Файловая система — UnionFS (overlay2, aufs). Нет гипервизора, нет промежуточной ОС. Контейнеры — это «процессы с усиленной изоляцией».

🪟 Docker на Windows В Windows есть два принципиально разных типа контейнеров, и способ запуска зависит от выбранного режима Docker Desktop.

1. Windows‑контейнеры (нативные для Windows) Используют технологии изоляции самой Windows:

Process Isolation (Windows Server Containers) — похоже на namespaces: процессы изолированы через Job Objects, Silos, Windows Filtering Platform. Ядро Windows одно на хост и контейнеры.

Hyper‑V Isolation — каждый контейнер запускается в своей микро‑ВМ с собственным ядром Windows (оптимизированным для контейнеров). Это полная изоляция ценой большего оверхеда. Windows‑контейнеры работают только с образами Windows (например, servercore). Они не совместимы с Linux‑образами.

2. Linux‑контейнеры на Windows Это самый распространённый сценарий (запуск nginx, postgres, python из Docker Hub). Здесь нативного Linux‑ядра в Windows нет, поэтому Docker Desktop: Создаёт легковесную виртуальную машину с настоящим ядром Linux. По умолчанию (начиная с Docker Desktop 2.2+) используется WSL 2 (Windows Subsystem for Linux 2).

Внутри этой ВМ работает полноценный демон Docker (dockerd), который управляет контейнерами так же, как на обычном Linux. Важно: Каждый Linux‑контейнер на Windows — это процесс внутри Linux‑ядра, работающего в виртуальной машине, а не процесс Windows.

🔄 Как это выглядит в WSL 2 text [Ваш терминал Windows] → [Docker CLI (Windows)] → (по именованному pipe) → [Docker Daemon внутри WSL 2 Linux VM] → [Linux-контейнеры] WSL 2 даёт почти нативную производительность, прозрачное пробрасывание файловой системы и сетевой интеграции.

Пояснения к диаграмм Docker CLI на Windows общается с Daemon внутри ВМ через специальный сокет. Файлы с диска C:\ доступны в контейнерах через автоматическое монтирование /mnt/c/ (производительность при этом ниже, чем при работе из WSL‑домашней директории). Все контейнеры изолированы стандартными средствами Linux‑ядра, которое живёт внутри ВМ. WSL 2 динамически управляет выделяемой памятью, но минимум ~2–3 ГБ ОЗУ уходит на работу самой ВМ.

🧠 Вывод, главное отличие: на Linux Docker работает нативно как расширение ядра, на Windows для Linux‑контейнеров он всегда запускает Linux‑ядро в виртуальной машине. Исключение — Windows‑контейнеры, которые являются родными процессами Windows, но используют образы Windows и редко применяются в повседневной веб‑разработке. Если есть желание копнуть ещё глубже (например, как WSL 2 обеспечивает почти нативный доступ к GPU из контейнера), могу рассказать отдельно.

🐧 Docker на Linux | Сетка — социальная сеть от hh.ru 🐧 Docker на Linux | Сетка — социальная сеть от hh.ru