Aller au contenu

Les bases commandes de bases docker

Pour savoir utiliser Docker, certaines commandes sont à connaitre. Et certaines seront dans des pages spécifiques car il y a beaucoup plus à dire.

Savoir si docker tournent

Il y a deux façon majeurs de savoir que Docker tournent ou non sur notre machine. on peut regarder si le deamon docker répond avec la commande suivante

$ docker -v             
Docker version 29.5.3, build d1c06ef

Ou bien regarder avec systemctl si c'est actif (et accessoirement si docker se lance au démarrage de la machine)

$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: enabled)
     Active: active (running) since Wed 2026-06-24 09:06:59 CEST; 7h ago
 Invocation: 9a8d938682c74dc3b5302e6332eea15d
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 1644 (dockerd)
      Tasks: 17
     Memory: 39.5M (peak: 131.5M, swap: 8.7M, swap peak: 8.7M)
        CPU: 5.507s
     CGroup: /system.slice/docker.service
             └─1644 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Récupérer une image docker

Par défaut, docker ira récupérer les images dans docker hub. C'est pour ça ça que quand on pull, on n'utilises uniquement le nom. On peut aussi rajouter un tag, si on en ajoute pas, par défaut cela prendre le tag latest

par exemple, pour récupérer l'image nginx on fait

$ docker pull nginx

on peut aussi récupérer des images de système d'exploitation

$ docker pull debian

Question

Il se passe quoi si on essaye de pull l'image docker de rocky linux?

docker pull rockylinux

Il y aura un une erreur à cause de la façon dont Red Hat (que dépend almalinux ou rocky), fait des realase de version et imposent d'utiliser un tag.

pour pouvoir récupérer l'image rockylinux il faut utiliser la commande suivante

docker pull rockylinux:9.3

Lister les conteneurs

Si vous connaissez la commande ps sur Linux, docker garde la même syntax de logique. Par exemple, pour lister tous les conteuneurs actifs:

$ docker ps

Mais certains conteneurs peuvent être éteind ou bien dans un état non voulu qui l'empêche de démarrer

$ docker ps -a

et pour avoir uniquement l'id du conteneur, il faut utiliser l'option -q qui peut être combiner avec l'option -a

$ docker ps -aq

Lancer un docker

Pour lancer un conteuneur, on utilises la commande docker run avec le nom de l'image voulu. Si on reprend notre première exemple :

$ docker run hello-world

on demande à docker de lancer l'image "hello-world". Et toutes les images fonctionnent pareil

$ docker run nginx
$ docker run rockylinux:9.3

comme on lance un processus, le conteneur va se lancer et selon ce qui se passe le conteneur va:

  • s'arrêter directement
    • debian
    • hello-world
  • s'exécuter au premier plan jusqu'à qu'on kill le processus
    • nginx

si on fait un docker ps, on verra qu'il n'y a pas de docker lancé. comme a dit un grand mage

Ils sont parties dans les couloirs du temps

Lancer un conteneur en arrière plan

Et si on veut que le conteneur contiue de tourner en arrière plan comme pour nginx, il faut rajouter l'option -d

$ docker run -d nginx

Intéragir au conteneur au lancement

Imaginons que vous voulez voir si votre conteneur debian a bien accès directement à internet. Comment vous pouvez faire ?

l'option la plus simple et de rajouter les arguments -i (interaftif) et -t (terminal) pour pouvoir lancer des commandes

$ docker run -it debian 
root@85248acd9f2a:/# apt update
Get:1 http://deb.debian.org/debian trixie InRelease [140 kB]
Get:2 http://deb.debian.org/debian trixie-updates InRelease [47.3 kB]
Get:3 http://deb.debian.org/debian-security trixie-security InRelease [43.4 kB]
Get:4 http://deb.debian.org/debian trixie/main amd64 Packages [9671 kB]
Get:5 http://deb.debian.org/debian trixie-updates/main amd64 Packages [5412 B]
Get:6 http://deb.debian.org/debian-security trixie-security/main amd64 Packages [223 kB]
Fetched 10.1 MB in 4s (2619 kB/s)                        
All packages are up to date.    
root@85248acd9f2a:/# 

Supprimer un conteneur dès qu'il s'arrête

Un des problèmes de docker c'est qu'un conteneur lancé reste en mémoire de docker

$ docker ps -a                              
CONTAINER ID   IMAGE         COMMAND                  CREATED              STATUS                     PORTS     NAMES
85248acd9f2a   debian        "bash"                   About a minute ago   Exited (0) 3 seconds ago             fervent_hopper
5297f5129756   nginx         "/docker-entrypoint.…"   25 hours ago         Exited (0) 25 hours ago              vigorous_diffie
9f9bde33b8d7   debian        "bash"                   25 hours ago         Exited (0) 25 hours ago              objective_fermi
6e6bb25a0942   debian        "bash"                   25 hours ago         Exited (0) 25 hours ago              nostalgic_hofstadter
76c52e74f795   hello-world   "/hello"                 43 hours ago         Exited (0) 43 hours ago              sweet_mclaren

pour régler ce problème on rajoute l'option --rm pour que dès que le conteneur s'arrête, il est effacé

$ docker ps -a                              
CONTAINER ID   IMAGE         COMMAND                  CREATED              STATUS                     PORTS     NAMES
85248acd9f2a   debian        "bash"                   About a minute ago   Exited (0) 3 seconds ago             fervent_hopper
5297f5129756   nginx         "/docker-entrypoint.…"   25 hours ago         Exited (0) 25 hours ago              vigorous_diffie
9f9bde33b8d7   debian        "bash"                   25 hours ago         Exited (0) 25 hours ago              objective_fermi
6e6bb25a0942   debian        "bash"                   25 hours ago         Exited (0) 25 hours ago              nostalgic_hofstadter
76c52e74f795   hello-world   "/hello"                 43 hours ago         Exited (0) 43 hours ago              sweet_mclaren

$ docker run --rm hello-world:latest                         

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

$ docker ps -a                      
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS                     PORTS     NAMES
85248acd9f2a   debian        "bash"                   4 minutes ago   Exited (0) 2 minutes ago             fervent_hopper
5297f5129756   nginx         "/docker-entrypoint.…"   25 hours ago    Exited (0) 25 hours ago              vigorous_diffie
9f9bde33b8d7   debian        "bash"                   25 hours ago    Exited (0) 25 hours ago              objective_fermi
6e6bb25a0942   debian        "bash"                   25 hours ago    Exited (0) 25 hours ago              nostalgic_hofstadter
76c52e74f795   hello-world   "/hello"                 43 hours ago    Exited (0) 43 hours ago              sweet_mclaren

on voit bien qu'entre les deux appels, il n'y a pas de nouveau conteneur qui restent dans les processus

Voir les logs du conteneur

pour voir les logs d'un conteneurs, il faut dans un premier temps lancé un conteneur (merci Jamy). On va lancé un petit nginx en arrière plan

$ docker run -d nginx
64c13627bd46cb95b2aec23ba12c691e09cbfe7438deaa4457ea73a00bd4a077

on vérifie que le conteneur n'a pas de problème

$ docker ps          
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
64c13627bd46   nginx     "/docker-entrypoint.…"   50 seconds ago   Up 49 seconds   80/tcp    nostalgic_cannon

et là on remarque pas mal d'info mais pour le moment on va s'interesser à 2: - CONTAINER ID - NAMES

Avec ces infos on va pouvoir voir les logs du conteneurs avec la commande docker logs

# avec le nom
$ docker logs nostalgic_cannon 

# avec l'ID
$ docker logs 64c13627bd46
$ docker logs nostalgic_cannon 
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2026/06/26 08:59:47 [notice] 1#1: using the "epoll" event method
2026/06/26 08:59:47 [notice] 1#1: nginx/1.31.2
2026/06/26 08:59:47 [notice] 1#1: built by gcc 14.2.0 (Debian 14.2.0-19) 
2026/06/26 08:59:47 [notice] 1#1: OS: Linux 6.12.90+deb13.1-amd64
2026/06/26 08:59:47 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1024:524288
2026/06/26 08:59:47 [notice] 1#1: start worker processes
2026/06/26 08:59:47 [notice] 1#1: start worker process 29
2026/06/26 08:59:47 [notice] 1#1: start worker process 30
2026/06/26 08:59:47 [notice] 1#1: start worker process 31
2026/06/26 08:59:47 [notice] 1#1: start worker process 32
2026/06/26 08:59:47 [notice] 1#1: start worker process 33
2026/06/26 08:59:47 [notice] 1#1: start worker process 34
2026/06/26 08:59:47 [notice] 1#1: start worker process 35
2026/06/26 08:59:47 [notice] 1#1: start worker process 36
2026/06/26 08:59:47 [notice] 1#1: start worker process 37
2026/06/26 08:59:47 [notice] 1#1: start worker process 38
2026/06/26 08:59:47 [notice] 1#1: start worker process 39
2026/06/26 08:59:47 [notice] 1#1: start worker process 40
2026/06/26 08:59:47 [notice] 1#1: start worker process 41
2026/06/26 08:59:47 [notice] 1#1: start worker process 42
2026/06/26 08:59:47 [notice] 1#1: start worker process 43
2026/06/26 08:59:47 [notice] 1#1: start worker process 44

Une autre option très interessante avec docker logs et l'option -f qui permet de faire un follow des logs en direct.

$ docker logs -f nostalgic_cannon

Cette option est notamment utile pour voir si le conteneur démarre bien sans avoir besoin de se connecter et de garder le conteneur en intéractif

Stopper un conteneur

Pour stopper un conteneur qui est lancé en arrière plan, il faut utiliser la commande docker stop avec le nom du conteneur

$ docker stop nostalgic_cannon

si on regarde les processus docker en cours, notre conteneur n'est plus actifs mais existe toujours dans les processus arrêter

$ docker ps               
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
$

$ docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS                      PORTS     NAMES
64c13627bd46   nginx         "/docker-entrypoint.…"   11 minutes ago   Exited (0) 53 seconds ago             nostalgic_cannon
85248acd9f2a   debian        "bash"                   18 minutes ago   Exited (0) 16 minutes ago             fervent_hopper
5297f5129756   nginx         "/docker-entrypoint.…"   25 hours ago     Exited (0) 25 hours ago               vigorous_diffie
9f9bde33b8d7   debian        "bash"                   25 hours ago     Exited (0) 25 hours ago               objective_fermi
6e6bb25a0942   debian        "bash"                   25 hours ago     Exited (0) 25 hours ago               nostalgic_hofstadter
76c52e74f795   hello-world   "/hello"                 43 hours ago     Exited (0) 43 hours ago               sweet_mclaren

Supprimer un conteneur

Mais là on commence à avoir beaucoup de conteneur qui ne servent pas il faudrait pouvoir s'en débarrasser. Pour cela la commande docker rm est notre ami.

Supprimer un conteneur

Pour supprimer un conteneur, on va simplement utiliser son ID ou son nom

$ docker rm nostalgic_cannon
nostalgic_cannon

$ docker ps -a              
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS                      PORTS     NAMES
85248acd9f2a   debian        "bash"                   21 minutes ago   Exited (0) 19 minutes ago             fervent_hopper
5297f5129756   nginx         "/docker-entrypoint.…"   25 hours ago     Exited (0) 25 hours ago               vigorous_diffie
9f9bde33b8d7   debian        "bash"                   25 hours ago     Exited (0) 25 hours ago               objective_fermi
6e6bb25a0942   debian        "bash"                   25 hours ago     Exited (0) 25 hours ago               nostalgic_hofstadter
76c52e74f795   hello-world   "/hello"                 43 hours ago     Exited (0) 43 hours ago               sweet_mclaren

Supprimer tous les conteneurs

On est des informaticiens, on n'aime pas se faire chier à tous supprimer un par un à la main. Et c'est pour ça que Linux est beau.

on pourrais supprimer plusieurs conteneur comme ceci

$ docker rm fervent_hopper vigorous_diffie objective_fermi nostalgic_hofstadter sweet_mclaren

Mais on a vu plutôt la commande docker ps -aq qui nous permet de récupérer uniquement les ID

# Sur linux utiliser $() permet de récupérer les résultats d'une sous commande
$ docker rm $(docker ps -aq)
85248acd9f2a
5297f5129756
9f9bde33b8d7
6e6bb25a0942
76c52e74f795

$ docker ps -a              
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Supprimer un conteneur qui est actif

On va relancer un nginx en arrière plan

$ docker run -d nginx

on récupère bien le nom du conteneur

$ docker ps   
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
348f3d23b2d3   nginx     "/docker-entrypoint.…"   28 seconds ago   Up 28 seconds   80/tcp    pensive_torvalds

Et si on supprime. On se prend une erreur

$ docker rm pensive_torvalds
Error response from daemon: cannot remove container "pensive_torvalds": container is running: stop the container before removing or force remove

Pour forcer la suppression on rajoute l'option -f

$ docker rm -f pensive_torvalds
pensive_torvalds

$ docker ps                    
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Notes

Ce n'est pas la meilleur façon, il faut toujours essayer d'arrêter puis de supprimer