За это отвечает ``unshare``.
Команда создает для процесса отдельные namespace: свой список процессов, свой mount-view, hostname, IPC, network и user namespace. В итоге программа видит не всю систему, а только ограниченный «кусок» окружения.
Пример:
Внутри новой shell можно выполнить:
И вместо сотен процессов увидеть почти пустую систему: bash с PID 1 и сам ps.
Это не Docker, не container runtime и не магия. Это базовый механизм ядра Linux, на котором контейнеры во многом и построены.
Полезно знать, если хотите понимать контейнеры не как «черный ящик», а на уровне того, что реально делает kernel.
Команда создает для процесса отдельные namespace: свой список процессов, свой mount-view, hostname, IPC, network и user namespace. В итоге программа видит не всю систему, а только ограниченный «кусок» окружения.
Пример:
sudo unshare —pid —fork —mount —uts —ipc —net —user —map-root-user —mount-proc bash
Внутри новой shell можно выполнить:
ps aux
И вместо сотен процессов увидеть почти пустую систему: bash с PID 1 и сам ps.
Это не Docker, не container runtime и не магия. Это базовый механизм ядра Linux, на котором контейнеры во многом и построены.
Полезно знать, если хотите понимать контейнеры не как «черный ящик», а на уровне того, что реально делает kernel.