Docker CLI — Guide des commandes
1. Introduction à Docker
Docker est une plateforme permettant de créer, lancer et gérer des applications dans des conteneurs.
Un conteneur embarque une application et ses dépendances dans un environnement isolé, sans avoir besoin de créer une machine virtuelle complète.
Docker repose principalement sur plusieurs notions :
- Image : modèle utilisé pour créer un conteneur.
- Conteneur : instance en cours d'exécution (ou arrêtée) d'une image.
- Volume : espace de stockage persistant utilisé par les conteneurs.
- Réseau : permet aux conteneurs de communiquer entre eux.
- Dockerfile : fichier décrivant comment construire une image.
Docker s'utilise principalement avec la commande :
docker
2. Vérifier l'installation de Docker
Vérifier la version
docker --version
Affiche la version du client Docker.
Afficher les informations Docker
docker info
Affiche les informations générales du moteur Docker :
- Nombre de conteneurs
- Nombre d'images
- Version du moteur
- Configuration du stockage
- Pilote réseau
- Ressources disponibles
Vérifier que Docker fonctionne
docker run hello-world
Cette commande télécharge l'image hello-world si nécessaire, crée un conteneur, l'exécute puis affiche un message de confirmation.
C'est une bonne commande pour vérifier rapidement que Docker fonctionne.
3. Gestion des conteneurs
Les conteneurs sont les instances des images Docker.
Lister les conteneurs en cours d'exécution
docker ps
Affiche les conteneurs actuellement démarrés.
Lister tous les conteneurs
docker ps -a
Affiche également les conteneurs arrêtés.
Afficher uniquement les identifiants
docker ps -q
Très utile pour automatiser des commandes.
Afficher les derniers conteneurs créés
docker ps -l
Créer et démarrer un conteneur
docker run nginx
Télécharge l'image Nginx si nécessaire, crée un conteneur et démarre le serveur.
Attention : le conteneur reste attaché au terminal dans ce mode.
Démarrer un conteneur en arrière-plan
docker run -d nginx
L'option -d signifie detached.
Le conteneur fonctionne en arrière-plan et le terminal reste disponible.
Donner un nom au conteneur
docker run -d --name mon-nginx nginx
Le conteneur porte maintenant le nom mon-nginx.
Il sera plus facile à identifier et à manipuler.
Exposer un port
docker run -d --name mon-nginx -p 8080:80 nginx
La syntaxe est :
-p PORT_HOTE:PORT_CONTENEUR
Ici :
- Le port
8080est utilisé sur la machine hôte. - Le port
80est utilisé dans le conteneur.
Le serveur est accessible depuis :
http://localhost:8080
Démarrer un conteneur existant
docker start mon-nginx
Arrêter un conteneur
docker stop mon-nginx
Docker demande au processus principal de s'arrêter proprement.
Redémarrer un conteneur
docker restart mon-nginx
Supprimer un conteneur
docker rm mon-nginx
Le conteneur doit être arrêté avant sa suppression.
Pour forcer la suppression :
docker rm -f mon-nginx
Attention : supprimer un conteneur ne supprime pas automatiquement les volumes qui lui sont associés.
4. Consulter les logs et surveiller un conteneur
Afficher les logs
docker logs mon-nginx
Affiche les sorties standard et les erreurs du conteneur.
Afficher les dernières lignes
docker logs --tail 100 mon-nginx
Affiche les 100 dernières lignes.
Suivre les logs en temps réel
docker logs -f mon-nginx
L'option -f signifie follow.
Elle permet de suivre les nouveaux messages au fur et à mesure.
Afficher les logs avec les dates
docker logs -t mon-nginx
Afficher les informations détaillées
docker inspect mon-nginx
Affiche la configuration complète du conteneur au format JSON :
- Adresse IP
- Ports
- Volumes
- Variables d'environnement
- Réseau
- Image utilisée
- État du conteneur
Afficher les ressources utilisées
docker stats
Affiche en temps réel :
- Utilisation CPU
- Mémoire
- Réseau
- Espace disque utilisé par les blocs
- Nombre de processus
Pour un conteneur précis :
docker stats mon-nginx
Afficher les processus du conteneur
docker top mon-nginx
Permet de voir les processus actifs dans le conteneur.
5. Exécuter des commandes dans un conteneur
La commande docker exec permet d'exécuter une commande dans un conteneur déjà démarré.
Ouvrir un terminal dans un conteneur
docker exec -it mon-nginx bash
Les options :
-i: garde l'entrée standard ouverte.-t: crée un terminal interactif.
Certains conteneurs ne possèdent pas bash. Dans ce cas, utiliser :
docker exec -it mon-nginx sh
Exécuter une commande sans ouvrir de terminal
docker exec mon-nginx ls /usr/share/nginx/html
Exécuter une commande avec un utilisateur particulier
docker exec -u root -it mon-nginx sh
Permet d'ouvrir un shell avec l'utilisateur root.
Exécuter une commande dans un répertoire précis
docker exec -w /tmp mon-nginx pwd
L'option -w définit le répertoire de travail.
6. Gestion des images Docker
Une image est un modèle permettant de créer des conteneurs.
Lister les images
docker images
Affiche les images présentes sur la machine.
Télécharger une image
docker pull nginx
Télécharge l'image depuis un registre Docker, généralement Docker Hub.
Télécharger une version précise
docker pull nginx:alpine
L'image utilise ici le tag alpine.
Supprimer une image
docker rmi nginx
Une image utilisée par un conteneur existant ne peut généralement pas être supprimée sans supprimer ou modifier d'abord ce conteneur.
Afficher l'historique d'une image
docker history nginx
Affiche les différentes couches qui composent l'image.
Inspecter une image
docker image inspect nginx
Affiche les informations détaillées de l'image.
Rechercher une image
docker search nginx
Recherche des images disponibles sur Docker Hub.
7. Construire une image avec un Dockerfile
Un Dockerfile est un fichier texte contenant les instructions nécessaires à la construction d'une image.
Exemple de Dockerfile :
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80
Explications :
FROM: définit l'image de base.COPY: copie un fichier dans l'image.EXPOSE: documente le port utilisé par l'application.
Construire une image
Depuis le dossier contenant le Dockerfile :
docker build -t mon-site .
Explications :
build: construit une image.-t: attribue un nom et éventuellement un tag.mon-site: nom de l'image..: dossier utilisé comme contexte de construction.
Construire une image avec un tag précis
docker build -t mon-site:1.0 .
Construire sans utiliser le cache
docker build --no-cache -t mon-site .
Permet de reconstruire les couches sans réutiliser le cache de construction.
Construire en utilisant un Dockerfile spécifique
docker build -f Dockerfile.prod -t mon-site:prod .
8. Gestion des volumes
Les volumes permettent de conserver des données indépendamment du cycle de vie des conteneurs.
Ils sont particulièrement importants pour les bases de données et les applications qui stockent des fichiers.
Lister les volumes
docker volume ls
Créer un volume
docker volume create mes-donnees
Inspecter un volume
docker volume inspect mes-donnees
Utiliser un volume dans un conteneur
docker run -d \
--name mon-nginx \
-p 8080:80 \
-v mes-donnees:/usr/share/nginx/html \
nginx
La syntaxe est :
-v NOM_VOLUME:CHEMIN_CONTENEUR
Les données stockées dans ce volume persistent après la suppression du conteneur.
Supprimer un volume
docker volume rm mes-donnees
Le volume ne doit pas être utilisé par un conteneur.
Supprimer les volumes inutilisés
docker volume prune
Attention : cette commande supprime les volumes inutilisés. Vérifier leur contenu et leur utilité avant de l'exécuter.
9. Gestion des réseaux Docker
Les réseaux permettent aux conteneurs de communiquer entre eux.
Lister les réseaux
docker network ls
Créer un réseau
docker network create mon-reseau
Inspecter un réseau
docker network inspect mon-reseau
Démarrer un conteneur sur un réseau
docker run -d \
--name serveur-web \
--network mon-reseau \
nginx
Connecter un conteneur existant à un réseau
docker network connect mon-reseau serveur-web
Déconnecter un conteneur d'un réseau
docker network disconnect mon-reseau serveur-web
Supprimer un réseau
docker network rm mon-reseau
Le réseau ne doit plus être utilisé par des conteneurs.
10. Copier des fichiers entre l'hôte et un conteneur
La commande docker cp permet de transférer des fichiers.
Copier un fichier de l'hôte vers le conteneur
docker cp fichier.txt mon-nginx:/tmp/fichier.txt
Copier un fichier du conteneur vers l'hôte
docker cp mon-nginx:/etc/nginx/nginx.conf ./nginx.conf
Copier un dossier
docker cp ./site mon-nginx:/usr/share/nginx/html
Cette commande fonctionne même si le conteneur est arrêté.
11. Variables d'environnement
Les variables d'environnement permettent de transmettre des paramètres à une application.
Définir une variable au démarrage
docker run -d \
--name mon-app \
-e APP_ENV=production \
nginx
Définir plusieurs variables
docker run -d \
--name mon-app \
-e APP_ENV=production \
-e APP_PORT=8080 \
nginx
Charger les variables depuis un fichier
Créer un fichier .env :
APP_ENV=production
APP_PORT=8080
Puis lancer :
docker run -d \
--name mon-app \
--env-file .env \
nginx
Attention : les variables d'environnement ne constituent pas un système de gestion sécurisé des secrets. Éviter d'y placer des mots de passe sensibles sans protection adaptée.
12. Nettoyage Docker
Docker conserve les conteneurs arrêtés, les images inutilisées, les réseaux et parfois les volumes.
Quelques commandes permettent de faire du nettoyage.
Supprimer les conteneurs arrêtés
docker container prune
Supprimer les images inutilisées
docker image prune
Supprimer les images inutilisées, y compris celles sans conteneur associé
docker image prune -a
Supprimer les réseaux inutilisés
docker network prune
Nettoyage général
docker system prune
Supprime notamment :
- Les conteneurs arrêtés
- Les réseaux inutilisés
- Les images inutilisées correspondant aux critères de nettoyage
- Le cache de construction inutilisé
Nettoyage plus important
docker system prune -a
Ajoute la suppression des images inutilisées, même si elles ne sont pas simplement des images intermédiaires.
Supprimer également les volumes inutilisés
docker system prune -a --volumes
Attention : commande potentiellement destructive.
Cette commande peut supprimer des données persistantes présentes dans des volumes inutilisés. Toujours vérifier ce qui peut être supprimé avant de l'exécuter.
13. Les principales options de docker run
La commande docker run est l'une des plus importantes de Docker.
Voici les options les plus utilisées :
| Option | Fonction |
|---|---|
-d |
Démarrer en arrière-plan |
-it |
Mode interactif avec terminal |
--name |
Donner un nom au conteneur |
-p |
Publier un port |
-v |
Monter un volume ou un dossier |
-e |
Définir une variable d'environnement |
--env-file |
Charger des variables depuis un fichier |
--network |
Choisir un réseau |
--restart |
Définir une politique de redémarrage |
--rm |
Supprimer le conteneur à son arrêt |
--user |
Définir l'utilisateur |
-w |
Définir le répertoire de travail |
--memory |
Limiter la mémoire |
--cpus |
Limiter le nombre de CPU |
Exemple complet
docker run -d \
--name mon-nginx \
--restart unless-stopped \
-p 8080:80 \
-v mes-donnees:/usr/share/nginx/html \
--network mon-reseau \
nginx:alpine
Cette commande :
- Crée un conteneur nommé
mon-nginx. - Le démarre en arrière-plan.
- Configure son redémarrage automatique, sauf s'il a été arrêté manuellement.
- Publie le port 80 du conteneur sur le port 8080 de l'hôte.
- Monte le volume
mes-donnees. - Connecte le conteneur au réseau
mon-reseau. - Utilise l'image
nginx:alpine.
14. Les politiques de redémarrage
Docker peut redémarrer automatiquement les conteneurs en fonction de leur état.
| Politique | Comportement |
|---|---|
no |
Aucun redémarrage automatique |
always |
Redémarre toujours le conteneur |
unless-stopped |
Redémarre sauf s'il a été arrêté manuellement |
on-failure |
Redémarre en cas d'erreur |
Exemple :
docker run -d \
--name mon-app \
--restart unless-stopped \
nginx
Pour modifier la politique d'un conteneur existant :
docker update --restart unless-stopped mon-app
15. Commandes pratiques supplémentaires
Afficher la consommation disque de Docker
docker system df
Affiche l'espace occupé par :
- Les images
- Les conteneurs
- Les volumes
- Le cache de construction
Mettre un conteneur en pause
docker pause mon-nginx
Reprendre un conteneur en pause
docker unpause mon-nginx
Renommer un conteneur
docker rename ancien-nom nouveau-nom
Modifier les ressources d'un conteneur
docker update --memory 512m --cpus 1 mon-nginx
Afficher la configuration d'un conteneur
docker inspect mon-nginx
Afficher la version du moteur et du client
docker version
16. Différence entre Docker et Docker Compose
Docker et Docker Compose sont complémentaires.
| Docker CLI | Docker Compose |
|---|---|
| Gère les conteneurs individuellement | Gère une application composée de plusieurs services |
Utilise principalement docker run |
Utilise un fichier compose.yaml |
Configure les ports avec -p |
Configure les ports dans le YAML |
Configure les volumes avec -v |
Configure les volumes dans le YAML |
Configure les réseaux avec --network |
Configure les réseaux dans le YAML |
| Pratique pour les commandes ponctuelles | Pratique pour les infrastructures reproductibles |
Exemple Docker :
docker run -d \
--name nginx \
-p 8080:80 \
nginx
Exemple Docker Compose :
services:
nginx:
image: nginx
ports:
- "8080:80"
Docker Compose s'appuie sur le moteur Docker pour créer et gérer les ressources.
17. Les commandes indispensables à retenir
Voici les commandes Docker les plus utiles au quotidien.
| Commande | Utilisation |
|---|---|
docker ps |
Voir les conteneurs actifs |
docker ps -a |
Voir tous les conteneurs |
docker images |
Voir les images |
docker pull |
Télécharger une image |
docker run |
Créer et démarrer un conteneur |
docker start |
Démarrer un conteneur |
docker stop |
Arrêter un conteneur |
docker restart |
Redémarrer un conteneur |
docker rm |
Supprimer un conteneur |
docker rmi |
Supprimer une image |
docker logs |
Consulter les logs |
docker exec -it |
Entrer dans un conteneur |
docker inspect |
Examiner une ressource |
docker stats |
Surveiller les ressources |
docker volume ls |
Lister les volumes |
docker network ls |
Lister les réseaux |
docker system df |
Voir l'espace disque utilisé |
docker system prune |
Nettoyer les ressources inutilisées |
18. Comprendre le cycle de vie d'un conteneur
Le cycle de vie classique d'un conteneur est le suivant :
- Télécharger une image avec
docker pull. - Créer et démarrer un conteneur avec
docker run. - Consulter son état avec
docker ps. - Consulter ses logs avec
docker logs. - Interagir avec lui avec
docker exec. - L'arrêter avec
docker stop. - Le supprimer avec
docker rmsi nécessaire.
Exemple :
docker pull nginx
docker run -d --name mon-nginx -p 8080:80 nginx
docker ps
docker logs mon-nginx
docker exec -it mon-nginx sh
docker stop mon-nginx
docker rm mon-nginx
19. Bonnes pratiques
Quelques règles importantes à retenir :
- Donner des noms explicites aux conteneurs.
- Utiliser des tags d'images précis plutôt que de dépendre systématiquement de
latest. - Utiliser des volumes pour les données qui doivent persister.
- Consulter les logs avant de redémarrer un conteneur en erreur.
- Éviter d'utiliser
docker rm -fsans raison. - Vérifier les volumes avant un nettoyage.
- Ne pas exposer inutilement les ports sur toutes les interfaces réseau.
- Éviter de stocker des secrets directement dans les fichiers de configuration.
- Utiliser Docker Compose pour les applications comportant plusieurs services.
20. Conclusion
La maîtrise des commandes Docker permet de gérer efficacement les conteneurs, les images, les volumes et les réseaux.
Les commandes à connaître en priorité sont :
docker ps
docker images
docker pull
docker run
docker stop
docker start
docker logs
docker exec
docker inspect
docker rm
docker volume ls
docker network ls
docker system df
Une fois ces commandes maîtrisées, il devient beaucoup plus facile de comprendre et d'administrer des environnements Docker, qu'ils soient simples ou composés de plusieurs services.