PRETIL - Wiki Interne

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 :

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 :

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 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 :

Afficher les ressources utilisées

docker stats

Affiche en temps réel :

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 :

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 :

Construire une image

Depuis le dossier contenant le Dockerfile :

docker build -t mon-site .

Explications :

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 :

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 :

  1. Crée un conteneur nommé mon-nginx.
  2. Le démarre en arrière-plan.
  3. Configure son redémarrage automatique, sauf s'il a été arrêté manuellement.
  4. Publie le port 80 du conteneur sur le port 8080 de l'hôte.
  5. Monte le volume mes-donnees.
  6. Connecte le conteneur au réseau mon-reseau.
  7. 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 :

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 :

  1. Télécharger une image avec docker pull.
  2. Créer et démarrer un conteneur avec docker run.
  3. Consulter son état avec docker ps.
  4. Consulter ses logs avec docker logs.
  5. Interagir avec lui avec docker exec.
  6. L'arrêter avec docker stop.
  7. Le supprimer avec docker rm si 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 :


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.