Wiki Gerfon

docker

Installer Docker en mode rootless

🐳 Procédure complète pour installer Docker en mode rootless pour un utilisateur dédié (dockeruser), avec les conteneurs et les données Docker dans son répertoire home (/home/dockeruser).

Elle installe d’abord les paquets Docker depuis le dépôt officiel Docker pour Debian, puis configure le daemon en mode rootless. Le script https://get.docker.com/rootless configure ce mode Rootless, mais ne remplace pas l’installation de Docker Engine, Docker CLI, des extras Rootless, de Buildx, de Compose et de containerd.

Cette procédure tient compte d’un point important : une session ouverte avec su - dockeruser ne dispose pas forcément de XDG_RUNTIME_DIR ni du bus D-Bus utilisateur. Dans ce cas, systemctl --user ne peut pas gérer Docker directement. La procédure ci-dessous prévoit donc la création et l’utilisation du gestionnaire systemd utilisateur.

1. 🧰 Prérequis système (en root)

apt update
apt install -y ca-certificates curl uidmap dbus-user-session slirp4netns fuse-overlayfs

# Créer l'utilisateur dédié si nécessaire
adduser --disabled-password --gecos "" dockeruser

2. 🐳 Installer les paquets Docker depuis le dépôt officiel Docker

Ajouter la clé et le dépôt Docker officiel pour Debian :

install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

cat <<EOF > /etc/apt/sources.list.d/docker.sources
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF

apt update

Installer Docker Engine et ses composants :

apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

Vérifier les paquets installés :

dpkg -l | grep -E 'docker|containerd'

⚠️ Ne pas installer le paquet Debian docker.io en parallèle des paquets du dépôt officiel Docker.

3. 🔢 Configurer subuid et subgid

Docker rootless a besoin d’une plage d’au moins 65 536 UID/GID subordonnés.

Vérifier la configuration existante :

grep dockeruser /etc/subuid /etc/subgid

L’objectif est d’avoir une seule plage de 65 536 identifiants dans chaque fichier :

/etc/subuid:dockeruser:165536:65536
/etc/subgid:dockeruser:165536:65536

Si aucune plage n’existe, ajouter :

usermod --add-subuids 165536-231071 dockeruser
usermod --add-subgids 165536-231071 dockeruser

Si une plage incorrecte existe déjà, la supprimer puis ajouter la plage complète. Par exemple :

usermod --del-subuids 165536-199999 dockeruser
usermod --del-subgids 165536-199999 dockeruser

usermod --add-subuids 165536-231071 dockeruser
usermod --add-subgids 165536-231071 dockeruser

Vérifier :

grep dockeruser /etc/subuid /etc/subgid

4. 🔁 Activer le lingering

loginctl enable-linger dockeruser

Vérifier :

loginctl show-user dockeruser

La sortie doit notamment contenir :

Linger=yes

5. 🧩 Démarrer le gestionnaire systemd utilisateur

Récupérer l’UID de l’utilisateur :

id -u dockeruser

Dans cet exemple, l’UID est 1001.

Démarrer le gestionnaire systemd utilisateur :

systemctl start user@1001.service

Vérifier son état :

systemctl status user@1001.service --no-pager

Puis vérifier que le répertoire runtime existe :

ls -ld /run/user/1001

6. ⚙️ Installer Docker rootless

Passer sur l’utilisateur dédié :

su - dockeruser
curl -fsSL https://get.docker.com/rootless | sh

Ce script installe/configure les éléments nécessaires au fonctionnement du daemon en mode Rootless et crée notamment le lanceur dockerd-rootless.sh. Il ne remplace pas l’étape précédente : les paquets docker-ce, docker-ce-cli, docker-ce-rootless-extras, docker-buildx-plugin, docker-compose-plugin et containerd.io restent installés et gérés par APT.

Les binaires et scripts Rootless sont normalement installés dans :

/home/dockeruser/bin/

Docker Compose est fourni par le paquet docker-compose-plugin installé à l’étape 2. Vérifier sa version :

docker compose version

Revenir ensuite en root :

exit

7. 🛠️ Finaliser l’installation du daemon rootless

Si l’installation initiale n’a pas créé :

/home/dockeruser/.config/systemd/user/docker.service

exécuter l’outil de configuration rootless avec un environnement utilisateur systemd valide :

sudo -u dockeruser XDG_RUNTIME_DIR=/run/user/1001 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus PATH=/home/dockeruser/bin:/usr/local/bin:/usr/bin:/bin /home/dockeruser/bin/dockerd-rootless-setuptool.sh install

dockerd-rootless-setuptool.sh install sert à créer ou réparer la configuration du service Rootless. Une fois le service installé, il n’a normalement besoin d’être exécuté qu’une seule fois, et non à chaque mise à jour de Docker.

Vérifier :

ls -la /home/dockeruser/.config/systemd/user/

On doit notamment trouver :

docker.service

8. 🚀 Démarrer et activer Docker

Depuis root :

systemctl --machine=dockeruser@ --user enable --now docker

Vérifier si nécessaire :

systemctl --machine=dockeruser@ --user status docker

9. 🖥️ Configurer les variables d’environnement

Ajouter dans /home/dockeruser/.bashrc :

export PATH=/home/dockeruser/bin:$PATH
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock

Puis recharger :

source ~/.bashrc

⚠️ Une session ouverte avec su - dockeruser peut ne pas définir XDG_RUNTIME_DIR. Dans ce cas, systemctl --user peut échouer avec une erreur concernant DBUS_SESSION_BUS_ADDRESS et XDG_RUNTIME_DIR.

10. ✅ Vérifier Docker rootless

Depuis root :

sudo -u dockeruser XDG_RUNTIME_DIR=/run/user/1001 DOCKER_HOST=unix:///run/user/1001/docker.sock /home/dockeruser/bin/docker info

La sortie doit notamment contenir :

Security Options:
  seccomp
   Profile: builtin
  rootless
  cgroupns

La présence de rootless confirme que Docker fonctionne bien en mode rootless.

Tester également un conteneur :

sudo -u dockeruser XDG_RUNTIME_DIR=/run/user/1001 DOCKER_HOST=unix:///run/user/1001/docker.sock /home/dockeruser/bin/docker run hello-world

Vérifier également les versions des composants installés :

docker version
docker compose version
docker buildx version

11. 🔄 Mettre à jour Docker

Les composants Docker installés à l’étape 2 sont mis à jour par APT, comme les autres paquets Debian. Il n’est pas nécessaire de relancer get.docker.com/rootless ni dockerd-rootless-setuptool.sh install après une mise à jour normale.

apt update
apt upgrade

Pour mettre à jour uniquement les composants Docker :

apt install --only-upgrade -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

Vérifier ensuite le service Rootless :

systemctl --machine=dockeruser@ --user status docker

12. 📦 Emplacement des données Docker

Les données Docker sont stockées dans :

/home/dockeruser/.local/share/docker

Le socket Docker est :

/run/user/1001/docker.sock

⚠️ Points d’attention généraux

↑