Aller au contenu

Les namespaces Linux

Les namespaces permettent d'isoler des aspects du système (réseau, système de fichier,...) pour créer des environnements indépendants. Ils sont à la base des conteneurs (Docker, LXC, etc.).

Les différents types

Type Isolation principale
mnt (Mount) Arborescence des systèmes de fichiers
pid (Process) Espace des PIDs (processus visibles)
net (Network) Interfaces réseau, routes, sockets
ipc (Interprocess Communication) Files de messages, sémaphores, shm
uts (Unix Timesharing System) Nom d’hôte et domaine NIS
user Identités et permissions (UID/GID mapping)
cgroup Hiérarchie des groupes de contrôle (ressources)
time Horloge système et offsets de temps

Principales commandes

  • unshare : démarrer un programme dans un nouveau namespace
  • lsns : lister les namespaces
  • ip netns : gérer les namespaces réseaux
  • nsenter : démarrer un programme dans un namespace existant

Docker et les namespace Linux

L'exemple suivant adapté à partir de celui de blog.stephane-robert.info - Introduction aux namespaces Linux illustre l'utilisation des namespaces Linux par Docker :

# démarrer un conteneur
sudo docker run -d --rm --name=busybox busybox:latest sleep 600
# récupérer le PID du processus correspondant au conteneur 
CONTAINER_PID=$(sudo docker inspect busybox -f json | jq '.[].State.Pid')
# afficher les namespaces correspondant
sudo lsns -p $CONTAINER_PID
# entrer dans le conteneur façon "docker exec" :
sudo nsenter --target $CONTAINER_PID --mount --uts --ipc --pid --net --cgroup sh

Ressources