Migrer Docker de RHEL 8 vers Debian 13 — Guide complet
Guide pas à pas pour migrer une stack Docker complète de RHEL 8 vers Debian 13 — sauvegarde des volumes, transfert des données, recréation des conteneurs et bascule d'IP.
Table des matières
RHEL 8 a atteint sa fin de support par Docker à partir de la version 29. Si votre infrastructure tourne encore sur RHEL 8 avec Docker, voici comment migrer proprement vers Debian 13 sans coupure de service prolongée.
Pourquoi migrer ?
- Docker 28 est la version maximale supportée sur RHEL 8
- Docker 29+ nécessite RHEL 9 ou une distribution alternative
- Debian 13 (Trixie) supporte Docker 29+ nativement
- Moins de contraintes de licence que RHEL
Inventaire avant migration
# Lister les conteneurs
docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"
# Lister les volumes
docker volume ls
# Identifier les bind mounts (données hors volumes Docker)
docker inspect $(docker ps -aq) \
--format '{{.Name}}: {{range .Mounts}}{{.Type}}:{{.Source}}→{{.Destination}} {{end}}'
Exemple de stack à migrer :
| Conteneur | Données persistantes | Méthode |
|---|---|---|
| portainer | Volume portainer_data |
Export tar |
| app-custom | Build local + .env | Copier sources + rebuild |
| stateless-tools | Aucune | Re-pull image |
| site-web | Bind mount /root/site/ |
Copier dans l’archive home |
Étape 1 — Sauvegarder
Archive du home (bind mounts inclus)
# Exclure les caches volumineux et régénérables
tar czf /tmp/home-backup.tar.gz \
--exclude=/root/jellyfin/cache \
--exclude=/root/.cache \
/root
ls -lh /tmp/home-backup.tar.gz
Exporter les volumes Docker
# Pour chaque volume nommé
for vol in $(docker volume ls -q); do
echo "Exporting $vol..."
docker run --rm \
-v "${vol}:/data" \
-v /tmp:/backup \
alpine tar czf "/backup/${vol}.tar.gz" /data
done
ls -lh /tmp/*.tar.gz
Étape 2 — Préparer la VM Debian 13
Créez une nouvelle VM (Proxmox ou autre) avec Debian 13 Netinstall, 50 Go de disque.
# Mise à jour système
apt update && apt upgrade -y
# Outils essentiels
apt install -y curl wget git vim sudo openssh-server netcat-openbsd
# Docker via le script officiel
curl -fsSL https://get.docker.com | sh
# Vérifier
docker version
# → Client/Server: Docker Engine 29.x.x
Étape 3 — Transférer les données
# Depuis la VM Debian — récupérer les archives
scp root@ANCIEN-IP:/tmp/home-backup.tar.gz /tmp/
scp root@ANCIEN-IP:/tmp/portainer_data.tar.gz /tmp/
# Extraire le home
tar xzf /tmp/home-backup.tar.gz -C /
# Importer le volume Portainer
docker volume create portainer_data
docker run --rm \
-v portainer_data:/data \
-v /tmp:/backup \
alpine tar xzf /backup/portainer_data.tar.gz -C /
# Vérifier
docker run --rm -v portainer_data:/data alpine ls /data
# → backups bin certs portainer.db ...
Étape 4 — Recréer les conteneurs
Portainer (sans Docker Swarm)
# /root/portainer-compose.yml
services:
portainer:
image: portainer/portainer-ee:latest
container_name: portainer
restart: always
ports:
- "8000:8000"
- "9443:9443"
volumes:
- portainer_data:/data
- /var/run/docker.sock:/var/run/docker.sock
portainer_agent:
image: portainer/agent:latest
container_name: portainer_agent
restart: always
ports:
- "9001:9001"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
volumes:
portainer_data:
external: true
docker compose -f /root/portainer-compose.yml up -d
Conteneurs stateless
# Pas de données à migrer — juste re-pull et recréer
docker run -d --name it-tools --restart always -p 8080:80 corentinth/it-tools
docker run -d --name srv-kms --restart always -p 1688:1688 mikolatero/vlmcsd
Conteneur avec build local
cd /root/mon-app
docker compose up -d --build
Étape 5 — Bascule d’IP
Une fois tous les conteneurs vérifiés sur la nouvelle VM :
# 1. Arrêter l'ancienne VM (ne pas la supprimer immédiatement)
# 2. Assigner la même IP à la nouvelle VM (DHCP statique ou config réseau)
# Sur Debian 13 — modifier l'IP
nano /etc/network/interfaces
# Changer l'adresse IP
systemctl restart networking
# 3. Vérifier la connectivité
ip a
ping 8.8.8.8
Étape 6 — Mettre à jour HAProxy si nécessaire
Si les backends pointent vers une IP qui a changé :
# haproxy.cfg — mettre à jour l'IP des backends
backend mon_backend
server app NOUVELLE-IP:PORT check
haproxy -c -f /etc/haproxy/haproxy.cfg && systemctl reload haproxy
Vérification finale
# Tous les conteneurs doivent être Up
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# Tester chaque service
curl -sk https://mon-service.domaine.com -o /dev/null -w "%{http_code}"
# → 200
Rollback
# Si problème — rallumer l'ancienne VM
# (gardez-la éteinte 48h avant suppression définitive)
# Remettre l'IP sur l'ancienne VM
# La nouvelle VM reprend son IP d'origine
En configurant la nouvelle VM sur une IP temporaire et en basculant l’IP uniquement une fois la migration validée, le downtime se réduit au temps du redémarrage réseau (~30 secondes).
Conclusion
La migration RHEL 8 → Debian 13 s’effectue proprement en moins de 2 heures pour une stack standard. La clé : sauvegarder les volumes Docker correctement et ne supprimer l’ancienne VM qu’après 48h de validation en production.
Comments