13. Administrer ses conteneurs - Docker

Maintenant que nous avons déployé plusieurs conteneurs simultanément avec Docker Compose, regardons comment administrer des conteneurs. En effet, pour maîtriser Docker, il faut pouvoir être à l'aise avec son environnement, pouvoir relancer un conteneur en appliquant les modifications effectuées, supprimer les ressources crées par Docker sur la machine hôte etc... C'est ce que nous allons voir dans ce cours.

La relance

Lancer un conteneur, l'arrêter, le supprimer, le créer à nouveau. Cela fait parti des tâches les plus couramment exécutées et c'est pour cela qu'il faut bien les maîtriser.

Prenons le cas d'une modification dans le fichier docker-compose.yml, pour sa bonne prise en compte, il arrive parfois que la commande docker-compose restart <nom du conteneur> ne suffise pas.

Pour nettoyer l'environnement de Docker Compose en supprimant tous les conteneurs, réseaux et volumes associés à l'application et tout recréer, il existe la commande suivante qui est bien efficace :

docker-compose down && docker-compose up -d

Vous aurez un environnement clean après cette commande.

Le stockage

Avec Docker, on ne se rends parfois pas compte de l'espace disque que l'on utilise. Par exemple, utiliser le tag latest  permet d'avoir l'image la plus récente à disposition mais cela accumule une nouvelle image à chaque mise à jour, ce qui peut parfois saturer l'espace disque.

Pour avoir une idée plus précise de l'espace disque occupé par Docker, il faut exécuter la commande suivante :

docker system df
Exemple de retour :
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          41        11        19.83GB   18.15GB (91%)
Containers      12        2         383.9MB   383.7MB (99%)
Local Volumes   173       8         5.19GB    2.441GB (47%)
Build Cache     40        0         1.265kB   1.265kB

On peut voir sur cet exemple que ce sont les images Docker qui consomment le plus d'espace disque.
Pour supprimer les images Docker inutilisées, les layers en cache, les conteneurs arrêtés ainsi que les networks inutilisés, il suffit d'exécuter la commande suivante :

docker system prune
💡
Il est aussi possible d'utiliser l'argument -a qui va supprimer toutes les images qui ne sont pas actuellement utilisées.

Il est aussi possible de supprimer les volumes Docker inutilisés avec la commande suivante :

docker volume prune

Les exports

Il est possible d'exporter le contenu du filesystem d'un conteneur. Vous aurez au final une archive tar avec le contenu de votre conteneur sans les volumes. Cela peut vous servir notamment lorsque vous souhaitez sauvegarder votre conteneur autrement qu'avec des volumes, pour pouvoir le transférer d'un serveur à un autre, vers le Cloud etc...
Cela sert également à analyser son contenu à des fins de debug, vérifier les fichiers qui ont été crées par Docker etc...

Pour exporter un conteneur Docker, il faut exécuter la commande suivante :

docker export --output="archive.tar" CONTAINER_NAME

Comme il est possible d'exporter un conteneur, vous vous doutez bien qu'il est aussi possible d'exporter une image Docker.
Cela est utile dans un contexte où l'on souhaite transférer une image Docker d'un environnement à un autre, sans passer par une registry par exemple. Le format de l'image sauvegardée est aussi au format tar.

Pour sauvegarder une image Docker, exécutez la commande suivante :

docker save monimage -o monimage.tar

Pour charger l'image Docker précédemment sauvegardée, exécutez la commande suivante :

docker load -i monimage.tar

Ainsi, vous n'aurez pas besoin d'effectuer une nouvelle fois l'étape de build de l'image si vous la transférez de cette manière.

Continuons sur l'administration de nos conteneurs avec le monitoring que nous aborderons dans le prochain cours.