docker run: pourquoi utiliser --rm (docker newbie)

110

J'essaye docker pour la première fois et je n'ai pas encore de "modèle mental". Débutant total.

Tous les exemples que je regarde ont inclus le --rmdrapeau à exécuter, tel que

docker run -it --rm ...
docker container run -it --rm ...

Question:

Pourquoi ces commandes incluent-elles le --rmdrapeau? Je penserais que si je devais passer par la peine de configurer ou de télécharger un conteneur avec les bonnes choses, pourquoi le supprimer? Je veux le garder pour l'utiliser à nouveau.

Donc, je sais que j'ai une fausse idée du docker.

matchmoments
la source
6
--rmsupprime le conteneur arrêté (celui docker runcréé), pas l'image sur laquelle il était basé (ce que vous avez téléchargé).
Ry-
docker run --helpdevrait être utile. Si vous ne voulez pas supprimer le conteneur , vous pouvez le passer
indapublic
1
cela doit être --rmet c'est pour nettoyer automatiquement le conteneur et supprimer le système de fichiers lorsque le conteneur sort et cela ne signifie pas retirer les choses du conteneur.
Mahattam
2
Vous ne téléchargez pas de conteneurs, vous téléchargez des images. Lisez ici pour connaître les différences entre les images et les conteneurs: docs.docker.com/engine/docker-overview/#docker-objects
axiac

Réponses:

98

Les conteneurs sont simplement une instance de l'image que vous utilisez pour les exécuter. L'état d'esprit lors de la création d'une application conteneurisée n'est pas de prendre un conteneur ubuntu frais et propre, par exemple, et de télécharger les applications et les configurations que vous souhaitez y inclure, puis de le laisser s'exécuter.

Vous devez traiter le conteneur comme une instance de votre application, mais votre application est incorporée dans une image. L'utilisation appropriée serait de créer une image personnalisée, dans laquelle vous intégrez tous vos fichiers, configurations, variables d'environnement, etc., dans l'image. En savoir plus sur Dockerfile et comment cela se fait ici

Une fois que vous avez fait cela, vous avez une image qui contient tout, et pour utiliser votre application, il vous suffit d'exécuter l'image avec les paramètres de port appropriés ou d'autres variables dynamiques, en utilisant docker run <your-image>

Exécuter des conteneurs avec un --rmindicateur est bon pour les conteneurs que vous utilisez pendant très peu de temps juste pour accomplir quelque chose, par exemple, compiler votre application dans un conteneur, ou simplement tester quelque chose qui fonctionne, et vous savez alors que c'est un conteneur de courte durée et vous dites à votre démon Docker qu'une fois son exécution terminée, effacez tout ce qui y est lié et économisez de l'espace disque.

buddy123
la source
Le passage des variables d'environnement à docker run serait une meilleure alternative. De cette façon, vous pouvez commencer avec différentes configurations (par exemple, la production par rapport à la préproduction)?
SCO
L'environnement Prod vs Test est un bon exemple où vous voudriez probablement utiliser des variables d'environnement pour effectuer la séparation et faire fonctionner votre application à partir de la même image, mais avec des paramètres différents pour chaque env
buddy123
Existe-t-il un moyen de supprimer automatiquement les conteneurs qui sont démarrés --rmlorsque l'utilisateur ferme la fenêtre du terminal. c'est à dire pas délibérément exécuté exitdans le shell du conteneur, mais ferme simplement la fenêtre GUI du terminal. J'ai remarqué que les conteneurs ne sont pas supprimés dans ce cas.
venkrao
20

L'indicateur --rmest utilisé lorsque vous avez besoin que le conteneur soit supprimé une fois la tâche terminée.

Cela convient aux petits tests ou à des fins de POC et évite les maux de tête pour les tâches ménagères.

Adnan Khan
la source
16

depuis https://docs.docker.com/engine/reference/run/#clean-up---rm

Par défaut, le système de fichiers d'un conteneur persiste même après la fermeture du conteneur. Cela rend le débogage beaucoup plus facile (puisque vous pouvez inspecter l'état final) et vous conservez toutes vos données par défaut. Mais si vous exécutez des processus de premier plan à court terme, ces systèmes de fichiers de conteneurs peuvent vraiment s'empiler. Si à la place vous souhaitez que Docker nettoie automatiquement le conteneur et supprime le système de fichiers lorsque le conteneur se ferme, vous pouvez ajouter l'indicateur --rm

En bref: il est utile de garder l'hôte propre des conteneurs arrêtés et non utilisés.

Sandro Modarelli
la source
1

J'utilise --rmlors de la connexion à des conteneurs en cours d'exécution pour effectuer certaines actions telles que la sauvegarde de la base de données ou la copie de fichiers. Voici un exemple:

docker run -v $(pwd):/mnt --link app_postgres_1:pg --rm postgres:9.5 pg_dump -U postgres -h pg -f /mnt/docker_pg.dump1 app_db

Ce qui précède connectera un conteneur en cours d'exécution nommé 'app_postgres_1' et créera une sauvegarde. Une fois la commande de sauvegarde terminée, le conteneur est entièrement supprimé.

Shoan
la source