Module 05 · Docker DevOps · Mémo

Mémo Docker et Docker Compose

Retrouver une commande par besoin ou une notion dans le cours — v1.5.3

Choisissez un besoin dans le sommaire. Les noms web, worker, db_data et applicatif sont des exemples à adapter à votre projet.

1. Docker — retrouver une commande

1.1 Images : construire et publier

BesoinCommande
Construire et nommer une imagedocker build -t mon-web:1.0 .
Reconstruire sans cachedocker build --no-cache -t mon-web:1.0 .
Lire les couches et instructionsdocker history --no-trunc mon-web:1.0
Préparer la publication dans un registredocker tag mon-web:1.0 localhost:5443/mon-web:1.0
Publier / récupérer cette imagedocker push localhost:5443/mon-web:1.0
docker pull localhost:5443/mon-web:1.0
Inspecter les métadonnées d’une imagedocker image inspect mon-web:1.0
S’authentifier sur le registre avant publication ou téléchargementdocker login localhost:5443
Lister les images localesdocker image ls
Choisir le Dockerfile et afficher le détail du builddocker build --progress=plain -f Dockerfile.sdk -t mon-image:1.0 .

1.2 Diagnostic : état, logs et consommation

BesoinCommande
Lister aussi les conteneurs arrêtésdocker ps -a
Filtrer les conteneurs par nomdocker ps -a --filter name=web
Suivre les 30 dernières lignes puis les nouvellesdocker logs -f --tail 30 web
Lire le code de sortie et la cause mémoiredocker inspect web --format 'Exit={{.State.ExitCode}} OOM={{.State.OOMKilled}}'
Lire les résultats du contrôle de santédocker inspect web --format '{{json .State.Health}}'
Voir la consommation actuelledocker stats --no-stream
Copier un fichier du conteneur vers le dossier courantdocker cp web:/etc/nginx/nginx.conf ./nginx.conf

1.3 Stockage : volumes et montages

BesoinCommande
Lister les volumesdocker volume ls
Retrouver l’emplacement géré par Dockerdocker volume inspect db_data --format '{{.Mountpoint}}'
Retrouver les sources, destinations et droits des montagesdocker inspect web --format '{{json .Mounts}}'
Retrouver le compte configuré dans le conteneurdocker inspect web --format '{{.Config.User}}'
Créer explicitement un volume nommédocker volume create mes-donnees

1.4 Réseau : connexions et ports

BesoinCommande
Lister les réseauxdocker network ls
Inspecter les conteneurs connectés à un réseaudocker network inspect applicatif
Rattacher un conteneur existant à un réseaudocker network connect applicatif web
Retrouver les ports publiésdocker port web
Créer un réseau bridge utilisateurdocker network create --driver bridge applicatif
Déconnecter un conteneur d’un réseaudocker network disconnect applicatif web

1.5 Nettoyage et espace disque

BesoinCommande
Mesurer l’espace disque utilisé avant de nettoyerdocker system df
Retirer les images sans tag inutiliséesdocker image prune
Étendre aux images inutilisées même avec un tagdocker image prune -a
Supprimer une image précisedocker image rm mon-web:1.0
Supprimer un volume précisdocker volume rm mes-donnees
Supprimer un réseau précisdocker network rm applicatif

⚠️ Supprimer un volume efface ses données. Vérifiez les ressources ciblées avant de confirmer un nettoyage. image prune -a retire aussi les images avec un tag lorsqu’aucun conteneur ne les utilise.

1.6 Moteur ciblé et environnement

BesoinCommande
Lister les connexions aux moteurs Dockerdocker context ls
Afficher le moteur actuellement ciblédocker context show
Vérifier client et serveurdocker version
Afficher les informations du moteurdocker info
Vérifier que le plugin Compose est disponibledocker compose version
Sélectionner un contexte existantdocker context use default
Cibler un autre moteur pour cette commande uniquementdocker --context default ps

1.7 Création : montages, ports et limites

BesoinCommande
Monter un volume nommé pour conserver les fichiersdocker create --name web-volume --mount type=volume,src=site_data,dst=/usr/share/nginx/html nginx:alpine
Monter un dossier de l’hôte en lecture seuledocker create --name web-bind --mount type=bind,src=/srv/site,dst=/usr/share/nginx/html,readonly nginx:alpine
Publier le port uniquement sur la boucle locale IPv4docker create --name web-local -p 127.0.0.1:8080:80 nginx:alpine
Fixer les plafonds CPU et mémoiredocker create --name web-limites --cpus=0.5 --memory=512m nginx:alpine

ℹ️ Ces exemples sont indépendants : docker create prépare un conteneur sans le démarrer. Le bind mount utilise ici un chemin Linux ; adaptez le chemin au poste utilisé. Le dossier source doit exister sur l’hôte du moteur Docker.

2. Docker Compose — retrouver une commande

2.1 Configuration : fichier et variables

BesoinCommande
Vérifier et afficher la configuration résoluedocker compose config
Lister les services déclarésdocker compose config --services
Choisir un fichier et un nom de projetdocker compose -f compose.prod.yaml -p boutique config
Choisir un fichier de variables pour l’interpolationdocker compose --env-file ./.env.production config
Vérifier la configuration sans l’afficherdocker compose config --quiet
Combiner un fichier principal et un fichier complémentairedocker compose -f compose.yaml -f compose.override.yaml config

2.2 Mise à jour : images et recréation

BesoinCommande
Reconstruire et appliquer la configurationdocker compose up -d --build
Récupérer les images puis actualiser les conteneursdocker compose pull
docker compose up -d
Forcer la recréation d’un servicedocker compose up -d --force-recreate web
Actualiser un service sans démarrer ses dépendancesdocker compose up -d --no-deps web

2.3 Diagnostic : services, logs et ports

BesoinCommande
Voir aussi les conteneurs arrêtés du projetdocker compose ps -a
Suivre les logs récents d’un servicedocker compose logs -f --tail 30 web
Voir les processus des servicesdocker compose top
Retrouver le port hôte associé au port interne 80docker compose port web 80

2.4 Instances et ressources du projet

BesoinCommande
Demander trois instances du service workerdocker compose up -d --scale worker=3
Lister les projets Composedocker compose ls
Lister les images utilisées par les conteneurs du projetdocker compose images

ℹ️ Le service worker doit être déclaré et compatible avec plusieurs instances : pas de nom de conteneur imposé ni de port hôte fixe en conflit.

2.5 Nettoyage : conserver ou supprimer les données

BesoinCommande
Supprimer les conteneurs et réseaux du projetdocker compose down
Supprimer aussi les volumes déclarés et anonymes attachésdocker compose down -v

⚠️ down -v peut effacer les données persistantes. Les volumes externes sont conservés.

3. Retrouver une notion dans le cours

NotionSection du cours
Isolation, namespaces et cgroups1.4 Comment Linux isole les conteneurs
Client, moteur, image et registre1.5 Les composants de Docker
Service principal, sidecar et initialisation1.6 Patterns : service principal, sidecar et initialisation
Vérifier et diagnostiquer l’installation2.7 Vérifier et diagnostiquer son environnement Docker
Choisir le moteur Docker2.5.2 Choisir explicitement un moteur
Images, couches et cache3.2 Couches, système de fichiers et cache
Dockerfile et processus de démarrage3.3 Dockerfile : décrire la construction
Contexte de construction et .dockerignore3.4 Contexte de construction et .dockerignore
Tags et digests3.5 Identifier les images : noms, tags et digests
Registres publics et privés3.6 Registres publics et registres privés
Construction multi-stage3.7 Optimiser une image avec un build multi-stage
Arrêt et code de sortie4.3.2 Comprendre pourquoi un conteneur s’arrête
Redémarrage automatiquePolitique de redémarrage
Interaction avec un conteneur : run / exec4.6 Interagir avec un conteneur
Volumes et bind mounts5.1 Stockage : volumes Docker et bind mounts
Permissions et UID/GID5.1.5 Qui accède aux fichiers montés ?
Réseau et résolution DNS5.2.3 Résolution DNS sur un réseau bridge utilisateur
Publication des ports5.3.3 Publier un port sur l’hôte
Variables et secrets5.4 Configuration : variables d’environnement et fichiers
Limites CPU et mémoire5.5 Ressources système : CPU, mémoire et limites
Daemon Docker6.3 Le daemon Docker (dockerd)
Socket Docker6.4 Le socket Docker
API Docker Engine6.5 L’API REST Docker Engine
Moteur local ou distant6.6 Pilotage local et distant
Structure du fichier Compose7.3 La structure d’un fichier compose.yaml
Mise à l’échelle avec --scalePlusieurs conteneurs pour un service : la mise à l’échelle
Nombre d’instances avec deploy.replicasDéclarer un nombre d’instances avec deploy.replicas
Nom de service et container_nameNom de service et nom de conteneur
Syntaxe longue des portsLire la syntaxe longue des ports
Volumes partagés et anonymes7.6 Volumes et persistance des données
environment, .env et env_file7.7 Configuration, variables et secrets
depends_on et healthcheck7.8 Dépendances et disponibilité des services
restart : règle ou commandePolitique de redémarrage d’un service
Limites de ressources ComposeLimiter les ressources avec deploy.resources.limits
Réservations de ressources ComposeLimites et réservations : plafond autorisé et ressources demandées
Choisir entre CLI, Desktop, Portainer et SDK8.6 Choisir le bon outil
Comptes non-root et rootless9.3 Utilisateur non-root, rootless et remappage : trois notions
Capabilities9.4 Capabilities et acquisition de privilèges
Profils Seccomp, AppArmor et SELinux9.5 Seccomp, AppArmor et SELinux : limiter les actions possibles
Protection des secrets9.8 Secrets et configuration sensible