Docker/Gestion des conteneurs


Les conteneurs sont stockés :

  • Sur Linux, dans /var/lib/docker/.
  • Sur MacOS, dans /Users/nom_utilisateur/Library/Containers/com.docker.docker/.
  • Sur Windows, dans C:\ProgramData\docker\ ou C:\ProgramData\DockerDesktop\.

runModifier

"run" s'utiliser pour lancer un conteneur à partir de son image. Une fois la commande exécutée, le conteneur s'arrête. Exemple qui liste le dossier courant :

docker run maven:latest ls
bin
boot
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

Pour rester connecté dedans, on utilise le mode interactif (-it) :

docker run -it redis
redis-cli

Pour partager un dossier avec la machine hôte, on peut utiliser "-v" pour "volume", ou "--mount" si le conteneur a des services[1]. Exemple qui liste le dossier de la machine hôte partagé avec le conteneur :

docker run -it -v "/$(pwd)/":/usr/src/mymaven maven ls usr/src/mymaven

execModifier

Pour exécuter une commande dans un conteneur. Ex :

docker exec redis sh -c 'pwd'

Autre exemple :

docker exec php8.0-fpm sh -c 'cd /var/www/mon_app; composer install'

Fonctionne aussi avec un fichier :

docker exec redis script.sh

Dans tous les conteneursModifier

Pour lancer une commande dans tous les conteneurs, il faut créer le fichier suivant[2] :

for container in `docker ps -q`; do 
  docker inspect --format='{{.Name}}' $container;
  docker exec -it $container $1;
done

Ensuite le lancer avec la commande en paramètre :

./dockers.sh date

/php7.3-fpm
Thu Mar 19 11:15:34 Europs 2020
/php7.4-fpm
Thu Mar 19 12:15:34 Europs 2020

Rentrer dans un conteneurModifier

Pour utiliser le conteneur, on peut rentrer dedans en utilisant le mode interactif :

docker exec -it redis bash

Cela permet d'enchainer les commandes (comme si on était sur un serveur hôte en SSH).

buildModifier

Pour lancer un conteneur à construire, il faut le faire depuis le dossier de son Dockerfile[3] :

docker build .

psModifier

Pour obtenir la liste des conteneurs lancés :

docker ps

Pour tous les conteneurs :

docker ps -a

Pour en supprimer un :

docker rm nom_du_coteneur

imageModifier

Pour toutes les images :

docker image ls

Pour en supprimer une :

docker rmi nom_image

save et loadModifier

Permet de sauvegarde une image. Pour toutes les sauvegarder :

 docker save $(docker images -q) -o images_docker.tar

On peut ensuite les recharger (par exemple sur une autre machine) avec :

docker load --input images_docker.tar
  Un save sur Docker Desktop Windows 2.3 ne permettra pas un load sur la 2.2.


statsModifier

Pour connaitre la consommation en ressources de chaque conteneur :

docker stats --no-stream

Ex :

CONTAINER ID   NAME    CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
f10f50a685a6   app_1   0.00%     77.97MiB / 15.38GiB   0.50%     322kB / 1.19MB    11.1MB / 9.2MB    6
6ef747c18fe3   app_2   1.00%     48.89MiB / 15.38GiB   0.31%     6.67kB / 0B       92.7MB / 5.91MB   6

pruneModifier

Pour supprimer les conteneurs arrêtés[4] :

docker container prune

Les images :

docker image prune

Les réseaux :

docker network prune

Les conteneurs, images et réseaux inutilisés :

docker system prune

Enfin pour les volumes (généralement volumineux) :

docker volume prune

Il existe des filtres[5] :

  • -a all : supprime tout.
  • -f force.
  • --filter : filtre par clé valeur. Si la clé est "until", alors il filtre par date (ex : until=720h).
  • --volumes : supprime les volumes des objets en paramètre.

RéférencesModifier