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 :
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
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.
# 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 sontUp) : 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 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
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 |