154 votes

Dois-je m'inquiéter de l'excès de conteneurs Docker qui ne fonctionnent pas ?

Chaque docker run ou chaque RUN à l'intérieur d'un Dockerfile, crée un conteneur. Si le conteneur n'est plus en cours d'exécution, il peut toujours être vu avec docker ps -a .

Devrais-je m'inquiéter d'avoir une énorme liste de conteneurs non fonctionnels ? Devrais-je émettre docker rm sur des conteneurs qui ne fonctionnent pas ?

Je ne suis pas certain des pénalités de performance ou de mémoire/stockage que subissent ces conteneurs qui ne tournent pas.

1 votes

A docker exec a été ajoutée il y a quelques temps, voir docs.docker.com/reference/commandline/cli/#exec - il exécutera une commande à partir d'un conteneur en cours d'exécution.

0 votes

Pour info, si vous voulez voir comment retirer les anciens conteneurs, consultez cette question : stackoverflow.com/questions/17236796/

1 votes

@schmunk Le lien a été déplacé. docs.docker.com/engine/reference/commandline/exec

79voto

Ken Cochrane Points 12318

Les conteneurs qui ne sont pas en cours d'exécution ne prennent pas de ressources système en dehors de l'espace disque.

Il est généralement bon de nettoyer après soi, mais si vous en avez beaucoup qui traînent, cela ne devrait pas du tout ralentir les performances.

Si vous constatez un ralentissement lors de l'exécution de commandes docker avec de nombreux conteneurs arrêtés, il peut s'agir d'un bogue dans docker, et vous devez soumettre un bogue.

1 votes

Les documents relatifs à la RUN ont maintenant déménagé : docs.docker.io/en/latest/reference/builder/#run

70voto

aculich Points 4563

El docker run documentation décrit comment nettoyer automatiquement le conteneur et supprimer le système de fichiers lorsque le conteneur sort :

  --rm=false: Automatically remove the container when it exits (incompatible with -d)

L'exemple ci-dessus montre que, par défaut, les conteneurs ne sont pas supprimés, mais l'ajout de la fonction --rm=true ou simplement l'abréviation --rm fonctionnera comme suit :

sudo docker run -i -t --rm ubuntu /bin/bash

Lorsque vous sortez du conteneur, il est automatiquement supprimé.

Vous pouvez tester cela en listant vos conteneurs docker dans une fenêtre de terminal :

watch -n1 'sudo ls -c /var/lib/docker/containers'

Puis, dans une autre fenêtre, exécutez cette commande pour lancer plusieurs conteneurs docker qui se fermeront tous automatiquement après avoir dormi pendant 10 secondes au maximum.

for i in {1..10}; do sudo docker run --rm ubuntu /bin/sleep $i & done

5 votes

Ce n'est pas une réponse directe à la question mais une réponse intéressante qui donnera aux utilisateurs un aperçu des mécanismes derrière Docker. Merci !

3 votes

-rm est déprécié et sera supprimé à un moment donné, utilisez l'option --rm à la place.

5voto

zergood Points 141

Si vous exécutez un conteneur avec un volume et que vous n'utilisez pas la fonction docker rm -v pour le retirer, alors le volume n'est pas retiré après le retrait d'un conteneur. Il existe également un numéro avec un pilote de stockage vfs. Si vous oubliez de nettoyer, les volumes vont consommer votre espace disque.

4voto

Franck Dernoncourt Points 4769

Je ne suis pas certain des pénalités de performance ou de mémoire/stockage que subissent ces conteneurs qui ne tournent pas.

Afin d'évaluer la quantité de stockage utilisée par les conteneurs Docker qui ne tournent pas, vous pouvez exécuter :

docker ps --size --filter "status=exited"

De manière équivalente, tu pourrais courir : docker container ls --filter "status=exited"

Vous pouvez également utiliser la commande docker system df (introduit dans Docker 1.13.0, janvier 2017) pour voir l'utilisation du disque de docker, par ex :

username@server:~$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              44                  28                  114.7GB             84.84GB (73%)
Containers          86                  7                   62.43GB             41.67GB (66%)
Local Volumes       2                   1                   0B                  0B
Build Cache                                                 0B                  0B

2voto

aryanveer Points 564

Une image est un instantané du système de fichiers et des dépendances ou un ensemble spécifique de répertoires d'une application/logiciel particulier. Par instantané, j'entends une copie des seuls fichiers nécessaires à l'exécution de ce logiciel (par exemple mysql, redis, etc.) avec des configurations de base dans un environnement de conteneur.

Lorsque vous créez un conteneur à l'aide d'une image, une petite section de ressources de votre système est isolée à l'aide de la fonction espacement des noms y cgroups et les fichiers contenus dans l'image sont ensuite copiés dans cet environnement isolé de ressources.

Les conteneurs ne prennent donc que de l'espace disque. S'il y a des conteneurs inutilisés, vous devez les supprimer, mais pas l'image car ils sont toujours réutilisables.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X