Ответ
Namespace (пространство имён) в Linux — это механизм ядра для изоляции и виртуализации системных ресурсов. Он позволяет процессу или группе процессов иметь собственное изолированное представление о таких ресурсах, как процессы, сеть или файловая система. Это фундаментальная технология для контейнеризации (Docker, LXC).
Основные типы namespaces и их назначение:
| Namespace | Флаг | Изолируемый ресурс |
|---|---|---|
| PID | CLONE_NEWPID |
Дерево процессов (ID процессов). Процесс в namespace видит только свои и дочерние процессы. |
| Network | CLONE_NEWNET |
Сетевые стеки (интерфейсы, маршруты, порты). Контейнер получает свою собственную сеть. |
| Mount | CLONE_NEWNS |
Точки монтирования файловой системы. Позволяет контейнеру иметь собственный корень /. |
| UTS | CLONE_NEWUTS |
Имя хоста (hostname) и доменное имя (domainname). |
| IPC | CLONE_NEWIPC |
Межпроцессное взаимодействие (очереди сообщений, сегменты разделяемой памяти). |
| User | CLONE_NEWUSER |
Таблицы идентификаторов пользователей и групп (UID, GID). |
| Cgroup | CLONE_NEWCGROUP |
Иерархия контрольных групп (cgroups). |
Практический пример: Создание нового PID и UTS namespace с помощью утилиты unshare.
# Запуск нового shell в изолированных namespaces
sudo unshare --pid --uts --fork /bin/bash
# Внутри нового namespace:
hostname my-container # Устанавливаем hostname, видимый только внутри
ps aux # Увидим только несколько процессов (изоляция PID)
Связь с Docker: При запуске docker run Docker создаёт для контейнера набор этих namespaces, обеспечивая его изоляцию от хостовой системы и других контейнеров.