Aller au contenu
selfhostr

guide · 7 min de lecture

Installer Docker

Le dépôt officiel plutôt que celui d'Ubuntu, le plugin compose, et les six commandes qui suffisent à faire tourner un home lab.

Docker est ce qui rend un home lab tenable. Sans lui, installer six services veut dire six façons de configurer, six manières de mettre à jour, et six occasions de casser le service d'à côté. Avec lui, chaque service vit dans sa boîte, et un fichier texte décrit l'ensemble.

Ce guide part d'un Ubuntu Server fraîchement installé — voir Installer Ubuntu Server si ce n'est pas encore fait. Comptez dix minutes.

Ne prenez pas celui d'Ubuntu

apt install docker.io fonctionne et installe une version empaquetée par Ubuntu, souvent en retard de plusieurs mois, sans le plugin compose. Le dépôt officiel de Docker demande cinq lignes de plus, une fois, et vous met sur les mises à jour du projet lui-même.

C'est la seule décision de ce guide. Le reste est mécanique.

Étape 1 — Retirer ce qui traîne

Sur une machine neuve, cette commande ne trouvera rien. Sur une machine qui a servi, elle évite des conflits de paquets dont les messages d'erreur ne désignent jamais la cause :

for pkg in docker.io docker-doc docker-compose docker-compose-v2 \
           podman-docker containerd runc; do
  sudo apt remove -y $pkg
done

Vos données et vos images ne sont pas touchées : elles vivent dans /var/lib/docker, que cette commande ne supprime pas.

Étape 2 — Ajouter le dépôt Docker

sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

Puis le dépôt lui-même :

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

Deux détails qui expliquent pourquoi cette version diffère de la plupart des guides qu'on trouve en ligne :

  • Le fichier est un .sources, pas une ligne dans docker.list. Docker a basculé sur ce format ; les deux fonctionnent, mais mieux vaut suivre la documentation en cours que celle de 2022.
  • La ligne Suites ne contient pas le nom de votre version en dur : elle le lit dans /etc/os-release. Sur une 26.04, ça donne resolute.

Si apt update se plaint de ne pas trouver le dépôt, c'est probablement que Docker n'a pas encore publié pour votre version d'Ubuntu — cas fréquent dans les semaines qui suivent une sortie. Vérifiez sur download.docker.com/linux/ubuntu/dists que le nom de code y figure. Au 28 juillet 2026, resolute y est, en amd64 et en arm64.

Étape 3 — Installer

sudo apt install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

Cinq paquets, dont deux qui méritent d'être nommés :

  • docker-compose-plugin fournit la commande docker compose, en deux mots. L'ancien docker-compose avec un tiret était un programme Python distinct, aujourd'hui retiré. Un guide qui vous fait taper docker-compose up a plus de quatre ans, et le reste de ses conseils a vieilli pareil.
  • docker-buildx-plugin sert à construire des images. Vous n'en aurez pas besoin tout de suite ; il est dans la liste parce que son absence produit des avertissements incompréhensibles au premier build.

Étape 4 — Vérifier

sudo docker run hello-world

Docker télécharge une image minuscule, la lance, affiche un paragraphe et s'arrête. Si vous le voyez, tout est en place.

docker --version
docker compose version

La seconde commande est le vrai test : c'est elle qui échoue quand le plugin compose n'est pas installé, et son absence ne se remarque qu'au moment où on en a besoin.

Étape 5 — Se passer de sudo

Par défaut, seul root parle au démon Docker. Pour vous éviter un sudo à chaque commande :

sudo usermod -aG docker $USER

Déconnectez-vous et reconnectez-vous pour que l'appartenance au groupe soit prise en compte. Une session SSH déjà ouverte ne la verra pas — c'est la cause numéro un du « je viens de faire la commande et ça ne marche toujours pas ».

Une chose à savoir, et la documentation de Docker le dit elle-même : le groupe docker équivaut à un accès root. Qui peut lancer un conteneur peut monter n'importe quel répertoire de la machine dedans. Sur un serveur personnel avec un seul utilisateur, c'est sans conséquence ; sur une machine partagée, ça mérite d'être su avant d'ajouter quelqu'un au groupe.

Étape 6 — Le premier docker-compose.yml

Le configurateur de ce site vous donne un fichier prêt à l'emploi. Voici sa mécanique, pour savoir ce que vous collez.

Créez un dossier par pile de services :

mkdir -p ~/docker && cd ~/docker
nano docker-compose.yml
services:
  exemple:
    image: nginx:alpine
    container_name: exemple
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - ./exemple/data:/usr/share/nginx/html

Quatre lignes qui décident de tout :

  • image — d'où vient le logiciel. Préférez une version explicite (nginx:1.29) à latest sur ce à quoi vous tenez : latest change sous vos pieds au prochain pull.
  • restart: unless-stopped — le conteneur repart après un redémarrage de la machine, mais pas si vous l'avez arrêté vous-même. C'est la valeur qu'on veut sur un serveur allumé en permanence.
  • ports"8080:80" se lit hôte:conteneur. Le premier nombre est celui que vous tapez dans votre navigateur, le second est celui que le logiciel écoute dans sa boîte. On ne change que le premier.
  • volumes./exemple/data est un chemin sur la machine, relatif au dossier du fichier. Tout ce qui n'est pas dans un volume disparaît à la première mise à jour du conteneur. C'est la seule erreur de ce guide qui coûte des données.

Puis :

docker compose up -d

-d détache : la commande rend la main et les conteneurs continuent. Sans lui, fermer le terminal arrête tout.

Les six commandes qui suffisent

docker compose up -d          # démarrer, ou appliquer une modification du fichier
docker compose down           # arrêter et supprimer les conteneurs
docker compose ps             # ce qui tourne, dans ce dossier
docker compose logs -f        # les journaux, en continu — Ctrl+C pour sortir
docker compose pull           # récupérer les nouvelles versions des images
docker stats                  # ce que ça consomme, en direct

Mettre à jour une pile, c'est trois commandes dans cet ordre :

docker compose pull
docker compose up -d
docker image prune -f

La dernière supprime les images devenues inutiles. Sans elle, un disque système de 250 Go se remplit en un an de versions que plus rien n'utilise — et l'erreur qui en résulte parle de disque plein, jamais de Docker.

Ce qui va vous arriver, et quoi en faire

permission denied sur les fichiers d'un volume. Le conteneur tourne sous un utilisateur qui n'est pas le vôtre. La plupart des images acceptent PUID et PGID dans leur section environment : donnez-leur le résultat de id -u et id -g.

port is already allocated. Deux services veulent le même port côté hôte. Changez le premier nombre de ports, jamais le second. sudo ss -tulpn | grep 8080 dit qui l'occupe.

Un conteneur qui redémarre en boucle. docker compose logs le dira. Neuf fois sur dix, c'est un chemin de volume qui n'existe pas ou une variable d'environnement obligatoire qui manque.

Le disque qui se remplit. docker system df montre où. docker system prune -a fait le ménage — attention, -a supprime aussi les images inutilisées, qu'il faudra les retélécharger.

Et ensuite

Vos services tournent, mais seulement depuis chez vous. Pour y accéder de l'extérieur, deux chemins : ouvrir un port sur votre routeur, ou passer par un tunnel qui n'en ouvre aucun — et c'est le second que ce site recommande.

Vidéo

Codeur Libre installe Docker et Docker Compose puis lance un premier conteneur — la partie où l'on voit ce que les commandes produisent réellement.

Rien n'est envoyé à YouTube tant que vous n'avez pas lancé la lecture. Ce site ne dépose aucun cookie qui lui soit propre.Regarder sur YouTube