Skip to content

Docker

Docker est une plateforme de conteneurisation qui permet d'empaqueter une application avec toutes ses dépendances dans une image, puis de l'exécuter de façon isolée et reproductible sous forme de conteneur. Le CLI Docker est organisé autour de management commands groupées par type d'objet (docker container, docker image, docker network, docker volume...), mais la plupart des commandes historiques (docker run, docker ps, docker build...) restent disponibles en raccourci de premier niveau, comme le montre la documentation officielle.

Images

bash
# Construire une image à partir d'un Dockerfile dans le dossier courant
docker build -t mon-app:latest .

# Construire en pointant vers un Dockerfile précis
docker build -t mon-app:latest -f Dockerfile.prod .

# Construire sans utiliser le cache (utile en cas de doute sur une couche périmée)
docker build --no-cache -t mon-app:latest .

# Lister les images locales
docker images
# équivalent :
docker image ls

# Télécharger une image depuis un registre (Docker Hub par défaut)
docker pull nginx:1.27

# Pousser une image vers un registre
docker push mon-registre.fr/mon-app:latest

# Tagger une image (nécessaire avant un push vers un registre précis)
docker tag mon-app:latest mon-registre.fr/mon-app:latest

# Supprimer une image
docker rmi mon-app:latest

# Supprimer toutes les images non utilisées par un conteneur
docker image prune

# Voir l'historique des couches d'une image
docker history mon-app:latest

# Inspecter les métadonnées complètes d'une image (labels, env, cmd...)
docker inspect mon-app:latest

Conteneurs

bash
# Créer et démarrer un conteneur à partir d'une image
docker run nginx

# En arrière-plan (detached), avec un nom explicite
docker run -d --name mon-nginx nginx

# En mappant un port du conteneur vers l'hôte (hôte:conteneur)
docker run -d -p 8080:80 --name mon-nginx nginx

# En montant un volume (hôte:conteneur)
docker run -d -v /data/nginx:/usr/share/nginx/html nginx

# En mode interactif avec un terminal (typiquement pour tester une image)
docker run -it ubuntu bash

# Supprimer automatiquement le conteneur une fois arrêté
docker run --rm -it ubuntu bash

# Avec des variables d'environnement
docker run -d -e "TZ=Europe/Paris" --name mon-app mon-app:latest

# Limiter les ressources allouées
docker run -d --memory="512m" --cpus="1.5" mon-app:latest

# Lister les conteneurs en cours d'exécution
docker ps

# Lister TOUS les conteneurs, y compris arrêtés
docker ps -a

# Démarrer / arrêter / redémarrer un conteneur existant
docker start mon-nginx
docker stop mon-nginx
docker restart mon-nginx

# Arrêt "propre" avec un délai avant le SIGKILL (par défaut 10s)
docker stop -t 30 mon-nginx

# Supprimer un conteneur arrêté
docker rm mon-nginx

# Forcer la suppression d'un conteneur en cours d'exécution
docker rm -f mon-nginx

# Supprimer tous les conteneurs arrêtés
docker container prune

Exécuter des commandes dans un conteneur

bash
# Ouvrir un shell dans un conteneur déjà démarré
docker exec -it mon-nginx bash

# Exécuter une commande ponctuelle sans shell interactif
docker exec mon-nginx nginx -t

# En tant qu'utilisateur précis
docker exec -it -u root mon-nginx bash

Logs et supervision

bash
# Voir les logs d'un conteneur
docker logs mon-nginx

# Suivre les logs en direct (comme tail -f)
docker logs -f mon-nginx

# Limiter aux 100 dernières lignes
docker logs --tail 100 mon-nginx

# Avec les timestamps
docker logs -t mon-nginx

# Statistiques d'utilisation des ressources en temps réel (CPU, mémoire, réseau)
docker stats

# Uniquement pour un conteneur précis, sans rafraîchissement continu
docker stats --no-stream mon-nginx

# Processus en cours dans un conteneur (équivalent ps côté hôte)
docker top mon-nginx

# Inspecter la configuration complète d'un conteneur (réseau, volumes, env...)
docker inspect mon-nginx

Réseaux

Par défaut, Docker crée trois réseaux (bridge, host, none), mais il est recommandé de créer un réseau dédié par projet pour isoler proprement les conteneurs et bénéficier de la résolution DNS automatique par nom de conteneur.

bash
# Lister les réseaux
docker network ls

# Créer un réseau bridge personnalisé
docker network create mon-reseau

# Démarrer un conteneur directement sur ce réseau
docker run -d --network mon-reseau --name app mon-app:latest

# Connecter un conteneur déjà démarré à un réseau existant
docker network connect mon-reseau mon-nginx

# Déconnecter
docker network disconnect mon-reseau mon-nginx

# Inspecter un réseau (conteneurs connectés, sous-réseau...)
docker network inspect mon-reseau

# Supprimer un réseau non utilisé
docker network rm mon-reseau

# Supprimer tous les réseaux non utilisés
docker network prune

Volumes

Les volumes sont gérés par Docker lui-même (contrairement aux bind mounts qui pointent vers un chemin de l'hôte) et constituent la méthode recommandée pour persister des données.

bash
# Lister les volumes
docker volume ls

# Créer un volume nommé
docker volume create mes-donnees

# Utiliser ce volume dans un conteneur
docker run -d -v mes-donnees:/var/lib/mysql mysql

# Inspecter un volume (chemin réel sur l'hôte, driver...)
docker volume inspect mes-donnees

# Supprimer un volume non utilisé
docker volume rm mes-donnees

# Supprimer tous les volumes non utilisés
docker volume prune

Copier des fichiers entre hôte et conteneur

bash
# De l'hôte vers le conteneur
docker cp fichier.txt mon-nginx:/tmp/fichier.txt

# Du conteneur vers l'hôte
docker cp mon-nginx:/etc/nginx/nginx.conf ./nginx.conf

Docker Compose

docker compose (intégré au CLI Docker depuis la v2, sans tiret) permet de définir et d'orchestrer plusieurs conteneurs liés via un fichier compose.yaml.

bash
# Démarrer tous les services définis dans compose.yaml, en arrière-plan
docker compose up -d

# Reconstruire les images avant de démarrer
docker compose up -d --build

# Voir l'état des services
docker compose ps

# Voir les logs de tous les services (ou d'un seul en précisant son nom)
docker compose logs -f
docker compose logs -f web

# Arrêter les services sans supprimer les conteneurs
docker compose stop

# Arrêter et supprimer conteneurs, réseaux (et volumes avec -v)
docker compose down
docker compose down -v

# Exécuter une commande dans un service précis
docker compose exec web bash

Nettoyage global du système

bash
# Aperçu de l'espace disque utilisé par Docker (images, conteneurs, volumes, cache de build)
docker system df

# Nettoyer conteneurs arrêtés, réseaux non utilisés, images "dangling" et cache de build
docker system prune

# Version plus agressive : inclut aussi les images non utilisées (pas seulement dangling)
docker system prune -a

# Idem, en incluant les volumes non utilisés — ⚠️ perte de données possible
docker system prune -a --volumes

Informations générales

bash
# Informations détaillées sur l'installation Docker (nombre de conteneurs, driver de stockage...)
docker info

# Version du client et du serveur (Docker Engine)
docker version

# Rechercher une image sur Docker Hub
docker search nginx

# Se connecter / déconnecter d'un registre
docker login mon-registre.fr
docker logout mon-registre.fr

Aide-mémoire rapide

SituationCommande
Démarrer un conteneur en arrière-plan avec un port exposédocker run -d -p 8080:80 --name app image
Entrer dans un conteneur en cours d'exécutiondocker exec -it nom_conteneur bash
Suivre les logs en directdocker logs -f nom_conteneur
Voir tous les conteneurs, même arrêtésdocker ps -a
Tout nettoyer (conteneurs, images, réseaux inutilisés)docker system prune -a
Reconstruire et redémarrer une stack Composedocker compose up -d --build
Copier un fichier depuis un conteneurdocker cp conteneur:/chemin ./local

Source : documentation officielle Docker CLI

Publié sous lience MIT.