На каких механизмах ядра Linux основана изоляция Docker-контейнеров

«На каких механизмах ядра Linux основана изоляция Docker-контейнеров» — вопрос из категории Devops, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Изоляция Docker-контейнеров достигается за счет комбинации двух фундаментальных механизмов ядра Linux, которые позволяют запускать процессы в изолированных окружениях, используя общее ядро хост-системы.

  1. Пространства имен (Namespaces) Namespaces обеспечивают изоляцию системных ресурсов. Каждый контейнер получает свой собственный набор ресурсов, невидимый для других контейнеров и хост-системы.

    • PID (Process ID): Изоляция процессов. Процессы внутри контейнера имеют свою собственную нумерацию, начиная с PID 1.
    • NET (Network): Изоляция сетевого стека. У контейнера свой IP-адрес, таблица маршрутизации и сетевые интерфейсы.
    • MNT (Mount): Изоляция файловой системы. Контейнер видит только свою файловую систему, смонтированную из образа.
    • UTS (UNIX Time-sharing System): Изоляция имени хоста и домена.
    • IPC (Inter-Process Communication): Изоляция межпроцессного взаимодействия.
    • User: Изоляция идентификаторов пользователей (UID/GID).
  2. Контрольные группы (Control Groups, cgroups) Cgroups отвечают за ограничение и учет потребления системных ресурсов процессами.

    • Ограничение ресурсов: Можно задать лимиты на использование CPU, оперативной памяти (RAM), дискового I/O.
    • Приоритизация: Можно управлять приоритетом процессов контейнера.
    • Учет: Cgroups собирают статистику по потреблению ресурсов.

Пример ограничения ресурсов с помощью cgroups:

Запуск контейнера, которому будет доступно не более 50% одного ядра CPU и 512 МБ оперативной памяти:

# --cpus="0.5" ограничивает использование CPU
# --memory="512m" ограничивает использование RAM
docker run --cpus="0.5" --memory="512m" -it ubuntu:latest bash

Таким образом, Docker не использует виртуализацию, а напрямую работает с ядром хоста, что обеспечивает высокую производительность и легковесность контейнеров.