138 votes

Que fait le drapeau '--rm' ?

J'essaie Docker pour la première fois et je n'ai pas encore de "modèle mental". Je suis totalement débutant.

Dans tous les exemples que j'ai examinés, on a inclus l'élément --rm à exécuter, comme

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

Question :

Pourquoi ces commandes incluent-elles le --rm drapeau ? Je pense que si j'ai pris la peine de créer ou de télécharger un conteneur contenant les bonnes choses, pourquoi le retirer ? Je veux le garder pour le réutiliser.

Donc, je sais que je me fais une fausse idée de Docker.

8 votes

--rm supprime le conteneur arrêté (celui docker run crée), et non l'image sur laquelle elle était basée (ce que vous avez téléchargé).

0 votes

docker run --help devrait être utile. Si vous ne voulez pas supprimer conteneur vous pouvez le passer

1 votes

Il doit être --rm et c'est pour nettoyer automatiquement le conteneur et supprimer le système de fichiers lorsque le conteneur sort et cela ne signifie pas supprimer le matériel du conteneur.

118voto

buddy123 Points 1604

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 avoir dedans, puis de le laisser fonctionner.

Vous devez traiter le conteneur comme une instance de votre application, mais votre application est intégrée dans une image. L'utilisation appropriée serait de créer une image personnalisée, où vous intégrez tous vos fichiers, configurations, variables d'environnement, etc. dans l'image. En savoir plus sur Dockerfile et sur la façon dont il est réalisé ici

Une fois que vous avez fait cela, vous avez une image qui contient tout, et pour utiliser votre application, il suffit de lancer 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 --rm flag est utile pour les conteneurs que vous utilisez pendant une très courte période, juste pour accomplir quelque chose, par exemple, compiler votre application dans un conteneur, ou simplement tester quelque chose qui fonctionne, et ensuite vous savez que c'est un conteneur de courte durée et vous dites à votre démon Docker qu'une fois qu'il a fini de fonctionner, il faut effacer tout ce qui s'y rapporte et économiser l'espace disque.

0 votes

Passer les variables d'environnement à docker run serait-il une meilleure alternative ? De cette façon, vous pouvez commencer avec différentes configurations (par exemple, production contre pré-production) ?

0 votes

L'environnement Prod vs Test est un bon exemple où vous voudrez probablement utiliser les env vars pour faire la séparation et faire en sorte que votre application fonctionne à partir de la même image, mais avec des paramètres différents pour chaque environnement.

0 votes

Existe-t-il un moyen de supprimer automatiquement les conteneurs qui sont démarrés à l'aide de la fonction --rm lorsque l'utilisateur ferme la fenêtre du terminal, c'est-à-dire qu'il ne peut pas délibérément exécuter exit dans le shell du conteneur, mais ferme simplement la fenêtre de l'interface graphique du terminal. J'ai remarqué que les conteneurs ne sont pas supprimés dans ce cas.

29voto

Adnan Khan Points 191

Le drapeau --rm est utilisé lorsque vous souhaitez que le conteneur soit supprimé une fois la tâche à laquelle il est destiné terminée.

Cette solution convient pour les petits tests ou les POC et évite le casse-tête de la maintenance.

21voto

De https:/

Par défaut, le système de fichiers d'un conteneur persiste même après la sortie du conteneur. Cela facilite grandement le débogage (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 conteneur peuvent vraiment s'accumuler. Si vous souhaitez que Docker nettoie automatiquement le conteneur et supprime le système de fichiers à la sortie du conteneur, vous pouvez ajouter l'attribut --rm drapeau

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

1voto

Plabon Dutta Points 620

Lorsque vous exécutez un conteneur à partir d'une image en utilisant une commande simple comme ( docker run -it ubuntu ), il fait tourner un conteneur. Vous vous attachez à votre conteneur en utilisant docker attach container-name (ou en utilisant exec pour une session différente).

Donc, lorsque vous êtes dans votre conteneur et que vous travaillez dessus et que vous tapez exit ou ctrl+z ou tout autre moyen de sortir du conteneur, autre que ctrl+p+q votre conteneur sort. Cela signifie que votre conteneur s'est arrêté, mais qu'il est toujours disponible sur votre disque et que vous pouvez le relancer avec : docker start container-name/ID . Mais lorsque vous exécutez le conteneur avec —rm à la sortie, le conteneur est supprimé définitivement.

1voto

Shoan Points 2196

J'utilise --rm lors 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

La commande ci-dessus 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é.

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