Что такое namespace в Linux?

«Что такое namespace в Linux?» — вопрос из категории Linux, который задают на 28% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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, обеспечивая его изоляцию от хостовой системы и других контейнеров.