Aller au contenu principal

Docker Engine et Compose

Les composants et leur rôle​

ComposantRôle
dockerd / Docker EngineDémon qui crée et gère les images, les conteneurs, les réseaux et les volumes
CLI dockerEnvoie les commandes au démon
containerdMoteur d’exécution de conteneurs sur lequel s’appuie Docker
BuildxConstruit des images et enrichit les possibilités de construction
Plugin ComposeDéfinit les applications en YAML et gère plusieurs conteneurs avec docker compose

Installer Docker ne déploie aucune application. Il faut créer et démarrer des conteneurs pour qu’une application s’exécute.

Le client envoie ses commandes au démon, qui gère images et conteneurs locaux et échange des images avec un registre.Voir l’image en grand

Partez des commandes à gauche : le client transmet ses demandes au démon. La commande build construit une image, pull la récupère depuis un registre et run crée puis démarre un conteneur, après téléchargement de l’image si nécessaire. L’image et le conteneur en cours d’exécution sont des objets distincts. Compose gère plusieurs services via ce même Engine ; il ne figure pas dans le schéma.

Examiner l’installation actuelle​

[REMOTE: VPS]
command -v docker || true
docker --version || true
docker compose version || true
dpkg -l | grep -E 'docker|containerd' || true

Si une installation Docker prise en charge fonctionne déjà, ne la réinstallez pas et ne mélangez pas les sources de paquets. Pour une nouvelle installation, configurez le dépôt apt selon les instructions officielles de Docker pour Ubuntu, sans mélanger ces paquets aux paquets Ubuntu docker.io.

Configurer le dépôt apt officiel​

[REMOTE: VPS]
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

Créez le fichier de dépôt ci-dessous en remplaçant les deux valeurs à renseigner par celles de ce VPS. Les commandes suivantes permettent de relever son nom de code Ubuntu et son architecture. Si le fichier existe déjà, examinez-le avant toute modification plutôt que de l’écraser directement.

/etc/apt/sources.list.d/docker.sources
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: <UBUNTU_CODENAME>
Components: stable
Architectures: <DPKG_ARCHITECTURE>
Signed-By: /etc/apt/keyrings/docker.asc

Utilisez le nom de code et l’architecture du système, sans recopier ceux d’une autre version Ubuntu :

[REMOTE: VPS]
. /etc/os-release
printf '%s\n' "${UBUNTU_CODENAME:-$VERSION_CODENAME}"
dpkg --print-architecture
sudo apt update
apt-cache policy docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin

Si le dépôt officiel ne propose aucun paquet candidat pour cette version, arrêtez-vous. Ne remplacez pas le nom de code par celui d’une autre version dans la configuration du dépôt.

Simuler l’installation, puis la vérifier​

[REMOTE: VPS]
sudo apt-get -s install \
docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin

Examinez les suppressions ou conflits annoncés par la simulation et confirmez qu’aucun paquet essentiel ne sera supprimé avant de lancer l’installation :

[REMOTE: VPS]
sudo apt install -y \
docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin

systemctl is-enabled docker
systemctl is-active docker
docker --version
docker compose version

Utilisation sans root et implications de sécurité​

[REMOTE: VPS]
sudo usermod -aG docker "$VPS_USER"

L’appartenance aux groupes supplémentaires est prise en compte lors d’une nouvelle ouverture de session. Déconnectez-vous, puis reconnectez-vous en SSH via Tailscale avant d’exécuter id. N’utilisez jamais cette commande :

sudo chmod 666 /var/run/docker.sock

Cette installation de Docker Engine fonctionne en tant que root. L’appartenance au groupe docker confère des privilèges de niveau root, car ses membres peuvent demander au démon de monter des chemins de l’hôte ou de lancer des conteneurs privilégiés. Réservez ce groupe aux administrateurs de confiance.

Test de fonctionnement​

[REMOTE: fresh login as VPS_USER]
id
docker info --format \
'ServerVersion={{.ServerVersion}} Driver={{.Driver}} CgroupDriver={{.CgroupDriver}}'
docker run --rm hello-world
docker ps -a

Avec hello-world, le CLI contacte le démon, qui télécharge l’image, crée un conteneur, l’exécute et affiche le résultat. --rm supprime le conteneur à sa sortie, pas son image ; celle-ci reste généralement dans le cache local.

Distinguer images, conteneurs et volumes​

  • Supprimer un conteneur ne supprime pas automatiquement son image. Les images sont des modèles ; les conteneurs en sont des instances. Pour les processus d’un conteneur et leurs limites mémoire, voir processus et mémoire.
  • Recréer un conteneur ne conserve pas les données importantes de sa couche inscriptible.
  • Les données persistantes doivent résider dans des volumes nommés ou des répertoires de l’hôte choisis explicitement.
  • /var/lib/docker contient l’état interne de Docker. Ne le modifiez pas manuellement.
  • Un fichier Compose décrit l’état souhaité, mais aucun fichier Compose d’application n’est créé à cette étape de préparation du serveur.

Rappel concernant le pare-feu​

Les ports de conteneurs publiés par Docker peuvent contourner les règles UFW ordinaires. Pour chaque futur déploiement, examinez ensemble les ports de Compose, les adresses d’écoute réelles et les règles Docker/iptables. Limiter un service à 127.0.0.1, à une adresse Tailscale ou à un réseau de proxy inverse a des conséquences différentes ; faites ce choix en connaissance de cause.

Explorer les liensOuvrir le réseau