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