📦 Namespaces: невидимые стены, которые делят Linux на миры
Кратко: Namespaces — это механизм ядра Linux, который создаёт изолированные «вселенные» для процессов. Процесс внутри namespace видит только свои ресурсы: свою сеть, свои процессы, своих пользователей, свою файловую систему. Это основа контейнерной изоляции — именно благодаря namespaces Docker считает, что он один на сервере, а на самом деле их сотни.
▫️Как дошли до жизни такой · 2002 г. — Mount namespace (изоляция точек монтирования) · 2006 г. — UTS namespace (изоляция hostname) · 2007 г. — IPC namespace (изоляция межпроцессного взаимодействия) · 2008 г. — PID namespace (изоляция дерева процессов) · 2009 г. — Network namespace (изоляция сетевых интерфейсов) · 2012 г. — User namespace (изоляция пользователей и групп) · 2013 г. — Docker объединяет namespaces + cgroups, запуская контейнерную революцию
▫️Как это выглядит на практике На хосте запущен Docker с контейнером: На хосте: ps aux | grep nginx # 12345 root /usr/sbin/nginx (процесс на хосте) Внутри контейнера: ps aux # PID 1 root /usr/sbin/nginx (внутри видно как PID 1) Тот же процесс, но благодаря PID namespace имеет разные идентификаторы. Network namespace даёт свою виртуальную сетевую карту, свой IP. Mount namespace — свою файловую систему. User namespace позволяет непривилегированному пользователю чувствовать себя root внутри.
▫️Зачем это нужно · Контейнеризация — каждый контейнер получает полный набор namespaces, создавая иллюзию отдельной ОС · Изоляция процессов — процесс не видит другие процессы за пределами своего pid namespace · Сетевая изоляция — можно запустить несколько экземпляров приложения на одном порту (каждый в своём network namespace) · Безопасность — user namespace позволяет запускать контейнеры без реального root на хосте
▫️Namespaces + cgroups = контейнеры Namespaces дают изоляцию (что видит процесс), cgroups — ограничение ресурсов (сколько может съесть). Вместе они образуют контейнер. Docker, Podman, LXC, Kubernetes — все используют эту связку.
▫️Культурный феномен · «Лего для операционной системы» — namespaces позволяют собирать изолированные среды как из кубиков · «Внутри всё root, снаружи никто» — user namespace сделал безопасные контейнеры реальностью · Спор о полной изоляции — namespaces не дают 100% изоляции (общее ядро). Для полной виртуализации нужны VM · Мем — «Docker — это chroot на стероидах». На самом деле chroot — только mount namespace, а Docker использует все восемь типов
▫️Современное положение (2026) · Восемь типов namespaces — все поддерживаются в современных ядрах · User namespace — ключевой для безопасности: позволяет запускать контейнеры без root на хосте · Podman / Rootless Docker — используют user namespace для работы без привилегий · Kubernetes — каждый под получает свой набор namespaces (pid, net, mnt, uts, ipc) · Развитие — новые namespace появляются редко, существующие дорабатываются · Ограничения — namespaces изолируют, но не виртуализируют. Общее ядро остаётся уязвимостью
#namespaces #linux #контейнеризация #docker #kubernetes #изоляция #devops