Skip to content

Docker CLI

1. Manipuler des conteneurs

docker run : basics

Info

Equivalent à docker container run avec la nouvelle syntaxe.

docker run permet de lancer un conteneur (à partir d'une image existante).

# Lancer un simple conteneur debian
docker run debian  # image officielle : provient du Hub https://hub.docker.com/_/debian/

# Lancer un simple conteneur NGINX
docker run nginx   # image officielle

# Lancer un simple conteneur MySQL
docker run mysql   # image officielle
Note

Si vous n'avez pas l'image indiquée dans la commande, elle sera automatiquement docker pull depuis le Docker Hub.

On peut indiquer quelle commande doit lancer le conteneur en la précisant en fin de ligne :

docker run debian sleep 999

On a donc la forme générale : docker run <IMAGE> [COMMAND]

Note

La notation avec des <> indique quelque chose d'obligatoire.
La notation avec des [] indique quelque chose d'optionnel.


docker run : options usuelles

  • -d : mode daemon
# -d permet de lancer en mode Daemon : en tâche de fond
docker run -d nginx
Warning

Les options de docker run doivent être spécifiées AVANT le nom de l'image.
En effet tout ce qui est indiqué après le nom de l'image, c'est la commande qu'on souhaite que le conteneur exécute (vu dans la partie précédente).
On a donc la forme générale : docker run [OPTIONS] <IMAGE> [COMMAND]

  • -p : partage de ports
# -p permet de partager un port du conteneur sur un port de la machine hôte
docker run -p 8000:80 nginx # le port 8080 de la machine hôte renvoie tout vers le port 80 du conteneur
curl localhost:8080         # permet de joindre le service NGINX depuis la machine hôte sur le port 8080
Info

Idéal (et nécessaire) quand on lance une application Web dans un conteneur et qu'on souhaite y accéder depuis la machine hôte.

  • -v : monter un volume
# -v permet de partager un "volume" : partager un dossier ou un fichier de la machine hôte dans le conteneuir
docker run -v 
Info

Idéal si on souhaite, au moment du docker run partager un fichier de conf ou du code à l'intérieur du conteneur.


docker ps : basics

Info

Equivalent à docker container ls avec la nouvelle syntaxe.

docker ps permet de lister les conteneurs existants.

# Lister les conteneurs actifs
docker ps
# Un exemple concret
 docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
9ed7a4e291c0   nginx     "/docker-entrypoint.…"   3 seconds ago   Up 2 seconds   80/tcp    meooow
------------   -----     ----------------------   -------------   ------------   ------    ------
  ID du ct     image     cmd lancé par le ct      écoulé depuis   état actuel    port      nom du
                                                  docker run                     utilisé   ct
Warning

Le champ PORTS ne présente PAS les partages de port.
C'est juste une bonne pratique de rédaction de Dockerfile d'indiquer avec EXPOSE que notre conteneur écoutera sur tel ou tel port.
C'est une forme de documentation. Si tu veux accéder à ce port, il faudra le partager sur la machine hôte avec l'option -p de docker run.


docker ps : options usuelles

  • -a (pour All) permet de lister tous les conteneurs (pas seulement ceux qui sont Up) : on a aussi les conteneurs inactifs
❯ docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                      PORTS     NAMES
9ed7a4e291c0   nginx     "/docker-entrypoint.…"   8 seconds ago    Up 7 seconds                80/tcp    meooow
668d9a943f5f   mysql     "docker-entrypoint.s…"   12 seconds ago   Exited (1) 11 seconds ago             pensive_swanson
9c3722fe34a9   debian    "bash"                   17 seconds ago   Exited (0) 17 seconds ago             modest_mayer
  • -q (pour Quiet) ne liste que les IDs
 docker ps -q
9ed7a4e291c0

docker rm

Info

Equivalent à docker container rm avec la nouvelle syntaxe.

docker rm permet de supprimer un conteneur existant. Deux cas possibles :

  • il est inactif : il sera juste supprimé
  • il est actif :
  • il faudra le stop puis le rm
  • OU il faut forcer la suppression avec -f

docker rm prend au moins un argument (ou plusieurs séparés par des espaces) :

  • nom du conteneur à supprimer
  • OU ALORS, ID du conteneur à supprimer
Hint

docker rm, comme toutes les commandes docker qui prennent des IDs en argument, supporte qu'on indique seulement les premiers caractères de l'ID.
Du moment que ça suffit pour trouver de manière unique le conteneur auquel on fait référence c'est ok.

Exemples concrets :

  • docker rm <ID_OR_NAME> : supprimer un conteneur inactif
 docker run -d nginx
e30b3666c4b41f84363cfe67c316aefa3149705ba9f50b36bd2dd3ab03365b53

 docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS        PORTS     NAMES
e30b3666c4b4   nginx     "/docker-entrypoint.…"   2 seconds ago   Up 1 second   80/tcp    quizzical_mirzakhani

 docker stop e30 # après cette ligne, le conteneur est inactif
e30

 docker rm e30
e30
  • docker rm -f <ID_OR_NAME> : forcer la suppression d'un conteneur actif
 docker run -d nginx
79f29c9b97c04209a26c131cf372504f1ca7a47cce0e18cf856b00b168d72629
# quand tu lances un conteneur avec -d, c'est son ID qui s'affiche là

# donc on connaît déjà son ID pour le delete, pas besoin de docker ps
 docker rm -f 79
79

2. Manipuler des images

docker pull

docker pull permet de télécharger une image depuis un Registre.

Typiquement, sans rien préciser de plus, les images seront téléchargées depuis le registre hébergé gracieusement par la société Docker : le Hub Docker

# télécharge l'image officielle Debian : https://hub.docker.com/_/debian
docker pull debian

# télécharge l'image vuejs publiée par un random "6gosrl" : https://hub.docker.com/r/6gosrl/vuejs
docker pull 6gosrl/vuejs
Note

N'importe qui peut héberger un registre, c'est très courant qu'une entreprise gère son propre registre, pour héberger ses propres images produites en interne.
Parmi les registres publics les plus utilisés, hors Docker Hub, on trouve notamment : Quay (maintenu par RedHat).
Les plateformes Git publiques proposent aussi des registres, pour que tes projets hébergés puissent stocker leurs images directement là bas aussi. On pense donc à ghcr de Github, ou le Container Registry de Gitlab


Gérer les images localement

La manipulation d'image se fait avec docker image <SUBCOMMAND>

Principales subcommands :

  • ls : lister les images
 docker image ls 
                                                                                                                    i Info    U  In Use
IMAGE           ID             DISK USAGE   CONTENT SIZE   EXTRA
debian:latest   910a89191f05        120MB             0B        
mysql:latest    00f3a44f3de1        932MB             0B    U   
nginx:latest    576306625d79        152MB             0B    U   
  • rm : supprimer une image
 docker image rm debian:latest
Untagged: debian:latest
Untagged: debian@sha256:0d01188e8dd0ac63bf155900fad49279131a876a1ea7fac917c62e87ccb2732d
Deleted: sha256:910a89191f051552dba0681387e09aa502f62c00ed2e6b75c26d6394795cf557
Deleted: sha256:e9b010e49a06fcdb7a531d2b36c7c266a5432b166bc31de70ebbab6cb2d4cef5
  • inspect : obtenir des infos sur une image
 docker inspect mysql:latest
[...] # sortie format JSON

3. Autres commandes cools

Quelques autres commandes en vrac dont je me sers souvent et dont vous pourriez avoir besoin.

  • Supprimer tout ce qui n'est plus utilisé par Docker, mais qui existe encore (genre les images plus utilisées par aucun conteneur)
 docker system prune
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - unused build cache

Are you sure you want to continue? [y/N]
  • Exécuter une commande dans un conteneur
# Ptite conteneur de test pour l'exemple
 docker run -d nginx
1c178277b6f8cffed05d51b518b2acd0421152d981dfe344c8065c07a4f4ee49

# tiens est ce que le dossier /app existe déjà dans ce conteneur ?
 docker exec 1c ls /app
ls: cannot access '/app': No such file or directory
  • Pop un shell interactif dans un conteneur existant
# Ptite conteneur de test pour l'exemple
 docker run -d nginx
1c178277b6f8cffed05d51b518b2acd0421152d981dfe344c8065c07a4f4ee49

 docker exec -it 1c bash # avec l'option -it comme interactif
root@1c178277b6f8:/#

4. Recap

Tâche Commande
Lancer un conteneur mysql docker run mysql
Lancer un conteneur avec un nom docker run --name meow mysql
Lancer un conteneur avec un partage de port docker run -p 8080:80 mysql
Lancer un conteneur avec un volume docker run -v /tmp/meow:/app mysql
Supprimer un conteneur "meow" docker rm -f meow
Pop un shell bash dans le conteneur "meow" docker exec -it meow bash
Télécharger une image depuis le Hub docker pull mysql