On peut "pull" une image depuis le registre Docker, un peu comme on "pull" du code depuis GitHub :
docker pull hello-world
docker run hello-world
Si vous avez "pull" l'image auparavant, le conteneur peut être démarré immédiatement. Dans le cas contraire, docker
la pull automatiquement, et démarre le conteneur une fois qu'il a terminé.
docker image ls
Exemple de sortie chez moi (après avoir déjà "pull" et créé plusieurs images) :
REPOSITORY TAG IMAGE ID CREATED SIZE
benoithubert/react-docker-dev latest 472d15020190 2 hours ago 582MB
benoithubert/node-mongo-docker-dev latest a3324104aa4e 2 hours ago 328MB
bhubr/node-os-display latest d4f5faa23693 18 hours ago 109MB
<none> <none> 6c2a3f962bae 18 hours ago 109MB
<none> <none> 0d135cc952fe 18 hours ago 109MB
<none> <none> 2c5c0738a088 18 hours ago 109MB
<none> <none> 776d1be7b08b 18 hours ago 109MB
docker/getting-started latest 26d80cd96d69 6 weeks ago 28.5MB
hello-world latest feb5d9fea6a5 3 months ago 13.3kB
kindest/node <none> 32b8b755dee8 8 months ago 1.12GB
Il est important de faire le ménage de temps en temps, car en expérimentant avec les Dockerfile, on peut se retrouver avec beaucoup d'images "obsolètes" sur sa machine.
Par exemple, si je veux supprimer l'image de la liste précédente ayant l'id 6c2a3f962bae
:
docker rmi 6c2a3f962bae
Il peut arriver que cette commande échoue : c'est le cas quand on cherche à supprimer une image qui est utilisée par un conteneur.
docker ps
permet de lister les conteneurs. Par défaut, elle n'affiche que les conteneurs actifs.
docker ps -a
permet de lister tous les conteneurs :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
72b35b29af68 benoithubert/node-mongo-docker-dev "docker-entrypoint.s…" 3 hours ago Up 3 hours 0.0.0.0:5000->5000/tcp laughing_lehmann
afc600f3cbce bhubr/node-os-display "docker-entrypoint.s…" 19 hours ago Exited (255) 16 hours ago thirsty_hellman
0c68982bf851 6c2a3f962bae "docker-entrypoint.s…" 19 hours ago Exited (137) 19 hours ago agitated_saha
709f5b05a125 6c2a3f962bae "docker-entrypoint.s…" 19 hours ago Exited (137) 19 hours ago elastic_bassi
f5e8cc2d7978 0d135cc952fe "docker-entrypoint.s…" 19 hours ago Exited (1) 19 hours ago eager_hypatia
a17cdf2a1af3 2c5c0738a088 "docker-entrypoint.s…" 19 hours ago Exited (0) 19 hours ago admiring_easley
915356b0975a 776d1be7b08b "docker-entrypoint.s…" 19 hours ago Exited (1) 19 hours ago pensive_archimedes
f9647d944f51 kindest/node:v1.21.1 "/usr/local/bin/entr…" 5 weeks ago Up 16 hours 127.0.0.1:1056->6443/tcp kind-control-plane
804dfdd87865 hello-world "/hello" 6 weeks ago Exited (0) 6 weeks ago loving_moser
f1e963a5d238 docker/getting-started "/docker-entrypoint.…" 6 weeks ago Exited (255) 5 weeks ago 0.0.0.0:80->80/tcp sweet_cray
La colonne STATUS
indique l'état du conteneur. Si je n'ai plus besoin des conteneurs arrêtés (statut Exited
), je peux les supprimer avec docker rm
suivi d'un ou plusieurs ids de conteneurs. Par ex. je peux supprimer les deux conteneurs les plus anciens de la liste précédente comme ceci (on n'est pas obligé de mettre l'id en entier, mais juste une sous-chaîne) :
docker rm f1e 804
Pour voir la sortie terminal d'un conteneur, utiliser docker logs
suivi de l'id ou du "nickname" (dernière colonne de docker ps
) :
docker logs 72b
OU
docker logs laughing_lehmann
Particulièrement, si on veut se connecter à un conteneur et y exécuter des commandes shell.
docker exec -it 72b ash
-it
permet d'executer la commande en mode interactif. ash
est ici le shell integre a l'image Linux Alpine.