Base de connaissances

Machines virtuelles Avancé 21 min

Déployer Docker proprement dans une VM

Utiliser Docker dans une VM en gardant logs, volumes et mises à jour maîtrisés.

Objectif pratique

Utiliser Docker sur machine virtuelle sans perdre le contrôle des volumes persistants, journaux et ports exposés.

Distribution utilisée

Debian / Ubuntu

Sommaire

  1. Installer une base maintenable
  2. Ranger les volumes
  3. Limiter les ports publiés
  4. Prévoir les mises à jour
  5. Surveiller les journaux Docker

Guide détaillé

Étape 1

Installer une base maintenable

Docker doit venir d’une source connue, documentée et compatible avec la distribution. La facilité d’installation ne suffit pas.

Observer la machine avant de changer quoi que ce soit

Ces commandes affichent la distribution, le nom de la machine, les interfaces réseau, les routes, la mémoire et l’espace disque. Elles ne modifient rien.

Debian / Ubuntu
cat /etc/os-release
hostnamectl
ip -br addr
ip route
free -h
df -h
Ce que font les commandes
  • `cat /etc/os-release` affiche la distribution et sa version exacte.
  • `hostnamectl` affiche le nom, le type de machine et quelques informations système.
  • `ip -br addr` liste les interfaces et adresses IP sous une forme courte.
  • `ip route` montre la passerelle utilisée et les routes connues.
  • `free -h` affiche RAM et swap dans une unité lisible.
  • `df -h` indique l’espace disque libre par point de montage.

Appliquer cette étape avec une trace simple

Pour cette machine virtuelle, on écrit ce que l’on va faire, on exécute les vérifications, puis on garde une note datée.

Debian / Ubuntu
mkdir -p ~/newscloud-notes
printf '%s\n' "Installer une base maintenable" > ~/newscloud-notes/etape.txt
systemctl --failed
journalctl -p warning -n 50 --no-pager
cat ~/newscloud-notes/etape.txt
Ce que font les commandes
  • `mkdir -p` crée le dossier demandé sans erreur s’il existe déjà.
  • `printf` écrit une note ou un fichier de contrôle avec un format prévisible.
  • `systemctl --failed` liste les services en échec pour repérer un problème global.
  • `journalctl` lit les journaux systemd ; l’option `--no-pager` évite un affichage interactif.
  • `cat ~/newscloud-notes/etape.txt` exécute l’action indiquée ; lisez la sortie avant de passer à la commande suivante.

Transformer une application en service systemd

systemd permet de démarrer automatiquement une application, lire ses journaux et la redémarrer proprement.

Debian / Ubuntu
sudo useradd --system --home /srv/app --shell /usr/sbin/nologin appsvc || true
sudo mkdir -p /srv/app
sudo chown -R appsvc:appsvc /srv/app
sudo nano /etc/systemd/system/app.service
sudo systemctl daemon-reload
sudo systemctl enable --now app.service
systemctl status app.service --no-pager
journalctl -u app.service -n 80 --no-pager
Ce que font les commandes
  • `sudo useradd --system --home /srv/app --shell /usr/sbin/nologin appsvc || true` exécute l’action indiquée ; lisez la sortie avant de passer à la commande suivante.
  • `mkdir -p` crée le dossier demandé sans erreur s’il existe déjà.
  • `chown` remet la propriété des fichiers au bon utilisateur de service.
  • `nano` ouvre le fichier à modifier ; remplacez les valeurs exemples avant d’enregistrer.
  • `systemctl daemon-reload` recharge les unités systemd après modification d’un fichier de service.
  • `systemctl enable --now` démarre le service immédiatement et l’active au prochain démarrage.
  • `systemctl status` confirme l’état du service et affiche les dernières lignes utiles.
  • `journalctl` lit les journaux systemd ; l’option `--no-pager` évite un affichage interactif.

Base outils Debian / Ubuntu

apt installe les utilitaires utiles, puis systemctl et journalctl vérifient que la machine reste saine.

Debian / Ubuntu
sudo apt update
sudo apt install -y curl vim rsync
systemctl --failed
journalctl -p warning -n 50 --no-pager
Ce que font les commandes
  • `apt update` recharge la liste des paquets Debian/Ubuntu disponibles.
  • `apt install` installe les paquets indiqués depuis les dépôts configurés.
  • `systemctl --failed` liste les services en échec pour repérer un problème global.
  • `journalctl` lit les journaux systemd ; l’option `--no-pager` évite un affichage interactif.

Variantes et attention

  • Les commandes de ce guide sont adaptées pour Debian / Ubuntu. Si votre image est une autre famille Linux, gardez la logique mais remplacez le gestionnaire de paquets et les noms de services.
  • En VM, vous contrôlez le système complet. Vous pouvez agir sur le noyau, le pare-feu et les volumes, mais vous êtes aussi responsable des mises à jour et de l’exposition réseau.
  • Niveau avancé : adaptez les chemins, noms de services et ports à votre application. Ne copiez pas les commandes sans remplacer les valeurs exemples.

Vérifications

  • La commande `systemctl --failed` ne doit pas afficher de service critique en échec.
  • La commande `df -h` doit montrer assez d’espace libre sur `/`, `/var` et les volumes applicatifs.
  • `systemctl status app.service` doit être actif.
  • `journalctl -u app.service` ne doit pas afficher de boucle d’erreurs.

Étape 2

Ranger les volumes

Les données persistantes doivent vivre dans des chemins sauvegardés. Un conteneur supprimé ne doit pas supprimer l’activité.

Observer la machine avant de changer quoi que ce soit

Ces commandes affichent la distribution, le nom de la machine, les interfaces réseau, les routes, la mémoire et l’espace disque. Elles ne modifient rien.

Debian / Ubuntu
cat /etc/os-release
hostnamectl
ip -br addr
ip route
free -h
df -h
Ce que font les commandes
  • `cat /etc/os-release` affiche la distribution et sa version exacte.
  • `hostnamectl` affiche le nom, le type de machine et quelques informations système.
  • `ip -br addr` liste les interfaces et adresses IP sous une forme courte.
  • `ip route` montre la passerelle utilisée et les routes connues.
  • `free -h` affiche RAM et swap dans une unité lisible.
  • `df -h` indique l’espace disque libre par point de montage.

Appliquer cette étape avec une trace simple

Pour cette machine virtuelle, on écrit ce que l’on va faire, on exécute les vérifications, puis on garde une note datée.

Debian / Ubuntu
mkdir -p ~/newscloud-notes
printf '%s\n' "Ranger les volumes" > ~/newscloud-notes/etape.txt
systemctl --failed
journalctl -p warning -n 50 --no-pager
cat ~/newscloud-notes/etape.txt
Ce que font les commandes
  • `mkdir -p` crée le dossier demandé sans erreur s’il existe déjà.
  • `printf` écrit une note ou un fichier de contrôle avec un format prévisible.
  • `systemctl --failed` liste les services en échec pour repérer un problème global.
  • `journalctl` lit les journaux systemd ; l’option `--no-pager` évite un affichage interactif.
  • `cat ~/newscloud-notes/etape.txt` exécute l’action indiquée ; lisez la sortie avant de passer à la commande suivante.

Transformer une application en service systemd

systemd permet de démarrer automatiquement une application, lire ses journaux et la redémarrer proprement.

Debian / Ubuntu
sudo useradd --system --home /srv/app --shell /usr/sbin/nologin appsvc || true
sudo mkdir -p /srv/app
sudo chown -R appsvc:appsvc /srv/app
sudo nano /etc/systemd/system/app.service
sudo systemctl daemon-reload
sudo systemctl enable --now app.service
systemctl status app.service --no-pager
journalctl -u app.service -n 80 --no-pager
Ce que font les commandes
  • `sudo useradd --system --home /srv/app --shell /usr/sbin/nologin appsvc || true` exécute l’action indiquée ; lisez la sortie avant de passer à la commande suivante.
  • `mkdir -p` crée le dossier demandé sans erreur s’il existe déjà.
  • `chown` remet la propriété des fichiers au bon utilisateur de service.
  • `nano` ouvre le fichier à modifier ; remplacez les valeurs exemples avant d’enregistrer.
  • `systemctl daemon-reload` recharge les unités systemd après modification d’un fichier de service.
  • `systemctl enable --now` démarre le service immédiatement et l’active au prochain démarrage.
  • `systemctl status` confirme l’état du service et affiche les dernières lignes utiles.
  • `journalctl` lit les journaux systemd ; l’option `--no-pager` évite un affichage interactif.

Base outils Debian / Ubuntu

apt installe les utilitaires utiles, puis systemctl et journalctl vérifient que la machine reste saine.

Debian / Ubuntu
sudo apt update
sudo apt install -y curl vim rsync
systemctl --failed
journalctl -p warning -n 50 --no-pager
Ce que font les commandes
  • `apt update` recharge la liste des paquets Debian/Ubuntu disponibles.
  • `apt install` installe les paquets indiqués depuis les dépôts configurés.
  • `systemctl --failed` liste les services en échec pour repérer un problème global.
  • `journalctl` lit les journaux systemd ; l’option `--no-pager` évite un affichage interactif.

Variantes et attention

  • Les commandes de ce guide sont adaptées pour Debian / Ubuntu. Si votre image est une autre famille Linux, gardez la logique mais remplacez le gestionnaire de paquets et les noms de services.
  • En VM, vous contrôlez le système complet. Vous pouvez agir sur le noyau, le pare-feu et les volumes, mais vous êtes aussi responsable des mises à jour et de l’exposition réseau.
  • Niveau avancé : adaptez les chemins, noms de services et ports à votre application. Ne copiez pas les commandes sans remplacer les valeurs exemples.

Vérifications

  • La commande `systemctl --failed` ne doit pas afficher de service critique en échec.
  • La commande `df -h` doit montrer assez d’espace libre sur `/`, `/var` et les volumes applicatifs.
  • `systemctl status app.service` doit être actif.
  • `journalctl -u app.service` ne doit pas afficher de boucle d’erreurs.

Étape 3

Limiter les ports publiés

Exposez seulement ce que le reverse proxy ou les utilisateurs doivent atteindre. Les ports internes restent internes.

Observer la machine avant de changer quoi que ce soit

Ces commandes affichent la distribution, le nom de la machine, les interfaces réseau, les routes, la mémoire et l’espace disque. Elles ne modifient rien.

Debian / Ubuntu
cat /etc/os-release
hostnamectl
ip -br addr
ip route
free -h
df -h
Ce que font les commandes
  • `cat /etc/os-release` affiche la distribution et sa version exacte.
  • `hostnamectl` affiche le nom, le type de machine et quelques informations système.
  • `ip -br addr` liste les interfaces et adresses IP sous une forme courte.
  • `ip route` montre la passerelle utilisée et les routes connues.
  • `free -h` affiche RAM et swap dans une unité lisible.
  • `df -h` indique l’espace disque libre par point de montage.

Lister les ports et tester le réseau

On vérifie ce qui écoute réellement et on teste localement avant de chercher une erreur côté DNS ou routeur.

Debian / Ubuntu
ip -br addr
ip route
sudo ss -tulpn
curl -I http://127.0.0.1
nc -vz 127.0.0.1 80
Ce que font les commandes
  • `ip -br addr` liste les interfaces et adresses IP sous une forme courte.
  • `ip route` montre la passerelle utilisée et les routes connues.
  • `ss -tulpn` liste les ports ouverts et les processus qui écoutent.
  • `curl` teste une URL depuis la machine elle-même.
  • `nc -vz` teste si un port TCP répond sans envoyer de données applicatives.

Transformer une application en service systemd

systemd permet de démarrer automatiquement une application, lire ses journaux et la redémarrer proprement.

Debian / Ubuntu
sudo useradd --system --home /srv/app --shell /usr/sbin/nologin appsvc || true
sudo mkdir -p /srv/app
sudo chown -R appsvc:appsvc /srv/app
sudo nano /etc/systemd/system/app.service
sudo systemctl daemon-reload
sudo systemctl enable --now app.service
systemctl status app.service --no-pager
journalctl -u app.service -n 80 --no-pager
Ce que font les commandes
  • `sudo useradd --system --home /srv/app --shell /usr/sbin/nologin appsvc || true` exécute l’action indiquée ; lisez la sortie avant de passer à la commande suivante.
  • `mkdir -p` crée le dossier demandé sans erreur s’il existe déjà.
  • `chown` remet la propriété des fichiers au bon utilisateur de service.
  • `nano` ouvre le fichier à modifier ; remplacez les valeurs exemples avant d’enregistrer.
  • `systemctl daemon-reload` recharge les unités systemd après modification d’un fichier de service.
  • `systemctl enable --now` démarre le service immédiatement et l’active au prochain démarrage.
  • `systemctl status` confirme l’état du service et affiche les dernières lignes utiles.
  • `journalctl` lit les journaux systemd ; l’option `--no-pager` évite un affichage interactif.

Base outils Debian / Ubuntu

apt installe les utilitaires utiles, puis systemctl et journalctl vérifient que la machine reste saine.

Debian / Ubuntu
sudo apt update
sudo apt install -y curl vim rsync
systemctl --failed
journalctl -p warning -n 50 --no-pager
Ce que font les commandes
  • `apt update` recharge la liste des paquets Debian/Ubuntu disponibles.
  • `apt install` installe les paquets indiqués depuis les dépôts configurés.
  • `systemctl --failed` liste les services en échec pour repérer un problème global.
  • `journalctl` lit les journaux systemd ; l’option `--no-pager` évite un affichage interactif.

Variantes et attention

  • Les commandes de ce guide sont adaptées pour Debian / Ubuntu. Si votre image est une autre famille Linux, gardez la logique mais remplacez le gestionnaire de paquets et les noms de services.
  • En VM, vous contrôlez le système complet. Vous pouvez agir sur le noyau, le pare-feu et les volumes, mais vous êtes aussi responsable des mises à jour et de l’exposition réseau.
  • Niveau avancé : adaptez les chemins, noms de services et ports à votre application. Ne copiez pas les commandes sans remplacer les valeurs exemples.

Vérifications

  • La commande `systemctl --failed` ne doit pas afficher de service critique en échec.
  • La commande `df -h` doit montrer assez d’espace libre sur `/`, `/var` et les volumes applicatifs.
  • `systemctl status app.service` doit être actif.
  • `journalctl -u app.service` ne doit pas afficher de boucle d’erreurs.

Étape 4

Prévoir les mises à jour

Image, variables, volumes et rollback doivent être compris avant le premier incident de version.

Observer la machine avant de changer quoi que ce soit

Ces commandes affichent la distribution, le nom de la machine, les interfaces réseau, les routes, la mémoire et l’espace disque. Elles ne modifient rien.

Debian / Ubuntu
cat /etc/os-release
hostnamectl
ip -br addr
ip route
free -h
df -h
Ce que font les commandes
  • `cat /etc/os-release` affiche la distribution et sa version exacte.
  • `hostnamectl` affiche le nom, le type de machine et quelques informations système.
  • `ip -br addr` liste les interfaces et adresses IP sous une forme courte.
  • `ip route` montre la passerelle utilisée et les routes connues.
  • `free -h` affiche RAM et swap dans une unité lisible.
  • `df -h` indique l’espace disque libre par point de montage.

Appliquer cette étape avec une trace simple

Pour cette machine virtuelle, on écrit ce que l’on va faire, on exécute les vérifications, puis on garde une note datée.

Debian / Ubuntu
mkdir -p ~/newscloud-notes
printf '%s\n' "Prévoir les mises à jour" > ~/newscloud-notes/etape.txt
systemctl --failed
journalctl -p warning -n 50 --no-pager
cat ~/newscloud-notes/etape.txt
Ce que font les commandes
  • `mkdir -p` crée le dossier demandé sans erreur s’il existe déjà.
  • `printf` écrit une note ou un fichier de contrôle avec un format prévisible.
  • `systemctl --failed` liste les services en échec pour repérer un problème global.
  • `journalctl` lit les journaux systemd ; l’option `--no-pager` évite un affichage interactif.
  • `cat ~/newscloud-notes/etape.txt` exécute l’action indiquée ; lisez la sortie avant de passer à la commande suivante.

Transformer une application en service systemd

systemd permet de démarrer automatiquement une application, lire ses journaux et la redémarrer proprement.

Debian / Ubuntu
sudo useradd --system --home /srv/app --shell /usr/sbin/nologin appsvc || true
sudo mkdir -p /srv/app
sudo chown -R appsvc:appsvc /srv/app
sudo nano /etc/systemd/system/app.service
sudo systemctl daemon-reload
sudo systemctl enable --now app.service
systemctl status app.service --no-pager
journalctl -u app.service -n 80 --no-pager
Ce que font les commandes
  • `sudo useradd --system --home /srv/app --shell /usr/sbin/nologin appsvc || true` exécute l’action indiquée ; lisez la sortie avant de passer à la commande suivante.
  • `mkdir -p` crée le dossier demandé sans erreur s’il existe déjà.
  • `chown` remet la propriété des fichiers au bon utilisateur de service.
  • `nano` ouvre le fichier à modifier ; remplacez les valeurs exemples avant d’enregistrer.
  • `systemctl daemon-reload` recharge les unités systemd après modification d’un fichier de service.
  • `systemctl enable --now` démarre le service immédiatement et l’active au prochain démarrage.
  • `systemctl status` confirme l’état du service et affiche les dernières lignes utiles.
  • `journalctl` lit les journaux systemd ; l’option `--no-pager` évite un affichage interactif.

Base outils Debian / Ubuntu

apt installe les utilitaires utiles, puis systemctl et journalctl vérifient que la machine reste saine.

Debian / Ubuntu
sudo apt update
sudo apt install -y curl vim rsync
systemctl --failed
journalctl -p warning -n 50 --no-pager
Ce que font les commandes
  • `apt update` recharge la liste des paquets Debian/Ubuntu disponibles.
  • `apt install` installe les paquets indiqués depuis les dépôts configurés.
  • `systemctl --failed` liste les services en échec pour repérer un problème global.
  • `journalctl` lit les journaux systemd ; l’option `--no-pager` évite un affichage interactif.

Variantes et attention

  • Les commandes de ce guide sont adaptées pour Debian / Ubuntu. Si votre image est une autre famille Linux, gardez la logique mais remplacez le gestionnaire de paquets et les noms de services.
  • En VM, vous contrôlez le système complet. Vous pouvez agir sur le noyau, le pare-feu et les volumes, mais vous êtes aussi responsable des mises à jour et de l’exposition réseau.
  • Niveau avancé : adaptez les chemins, noms de services et ports à votre application. Ne copiez pas les commandes sans remplacer les valeurs exemples.

Vérifications

  • La commande `systemctl --failed` ne doit pas afficher de service critique en échec.
  • La commande `df -h` doit montrer assez d’espace libre sur `/`, `/var` et les volumes applicatifs.
  • `systemctl status app.service` doit être actif.
  • `journalctl -u app.service` ne doit pas afficher de boucle d’erreurs.

Étape 5

Surveiller les journaux Docker

Les logs de conteneurs peuvent remplir le disque. Mettez une limite ou une rotation avant que cela devienne urgent.

Observer la machine avant de changer quoi que ce soit

Ces commandes affichent la distribution, le nom de la machine, les interfaces réseau, les routes, la mémoire et l’espace disque. Elles ne modifient rien.

Debian / Ubuntu
cat /etc/os-release
hostnamectl
ip -br addr
ip route
free -h
df -h
Ce que font les commandes
  • `cat /etc/os-release` affiche la distribution et sa version exacte.
  • `hostnamectl` affiche le nom, le type de machine et quelques informations système.
  • `ip -br addr` liste les interfaces et adresses IP sous une forme courte.
  • `ip route` montre la passerelle utilisée et les routes connues.
  • `free -h` affiche RAM et swap dans une unité lisible.
  • `df -h` indique l’espace disque libre par point de montage.

Vérifier Docker et ses volumes

Dans une VM, les volumes doivent pointer vers un dossier persistant et sauvegardé. En LXC, vérifiez d’abord que Docker imbriqué est autorisé.

Debian / Ubuntu
docker compose version
docker ps
sudo mkdir -p /srv/containers/app
sudo docker volume ls
sudo docker inspect NOM_CONTENEUR --format '{{ json .Mounts }}'
Ce que font les commandes
  • `docker compose` vérifie que l’outil Compose est disponible.
  • `docker ps` liste les conteneurs Docker en cours d’exécution.
  • `mkdir -p` crée le dossier demandé sans erreur s’il existe déjà.
  • `docker volume` liste les volumes persistants Docker.
  • `docker inspect` affiche les détails techniques d’un conteneur, dont ses montages.

Transformer une application en service systemd

systemd permet de démarrer automatiquement une application, lire ses journaux et la redémarrer proprement.

Debian / Ubuntu
sudo useradd --system --home /srv/app --shell /usr/sbin/nologin appsvc || true
sudo mkdir -p /srv/app
sudo chown -R appsvc:appsvc /srv/app
sudo nano /etc/systemd/system/app.service
sudo systemctl daemon-reload
sudo systemctl enable --now app.service
systemctl status app.service --no-pager
journalctl -u app.service -n 80 --no-pager
Ce que font les commandes
  • `sudo useradd --system --home /srv/app --shell /usr/sbin/nologin appsvc || true` exécute l’action indiquée ; lisez la sortie avant de passer à la commande suivante.
  • `mkdir -p` crée le dossier demandé sans erreur s’il existe déjà.
  • `chown` remet la propriété des fichiers au bon utilisateur de service.
  • `nano` ouvre le fichier à modifier ; remplacez les valeurs exemples avant d’enregistrer.
  • `systemctl daemon-reload` recharge les unités systemd après modification d’un fichier de service.
  • `systemctl enable --now` démarre le service immédiatement et l’active au prochain démarrage.
  • `systemctl status` confirme l’état du service et affiche les dernières lignes utiles.
  • `journalctl` lit les journaux systemd ; l’option `--no-pager` évite un affichage interactif.

Base outils Debian / Ubuntu

apt installe les utilitaires utiles, puis systemctl et journalctl vérifient que la machine reste saine.

Debian / Ubuntu
sudo apt update
sudo apt install -y curl vim rsync
systemctl --failed
journalctl -p warning -n 50 --no-pager
Ce que font les commandes
  • `apt update` recharge la liste des paquets Debian/Ubuntu disponibles.
  • `apt install` installe les paquets indiqués depuis les dépôts configurés.
  • `systemctl --failed` liste les services en échec pour repérer un problème global.
  • `journalctl` lit les journaux systemd ; l’option `--no-pager` évite un affichage interactif.

Variantes et attention

  • Les commandes de ce guide sont adaptées pour Debian / Ubuntu. Si votre image est une autre famille Linux, gardez la logique mais remplacez le gestionnaire de paquets et les noms de services.
  • En VM, vous contrôlez le système complet. Vous pouvez agir sur le noyau, le pare-feu et les volumes, mais vous êtes aussi responsable des mises à jour et de l’exposition réseau.
  • Niveau avancé : adaptez les chemins, noms de services et ports à votre application. Ne copiez pas les commandes sans remplacer les valeurs exemples.

Vérifications

  • La commande `systemctl --failed` ne doit pas afficher de service critique en échec.
  • La commande `df -h` doit montrer assez d’espace libre sur `/`, `/var` et les volumes applicatifs.
  • `systemctl status app.service` doit être actif.
  • `journalctl -u app.service` ne doit pas afficher de boucle d’erreurs.

Checklist finale

  • Volumes sauvegardés
  • Ports limités
  • Rollback prévu