Docker-Lauf: Warum --rm verwenden (Docker-Neuling)

101

Ich versuche es zum ersten Mal mit Docker und habe noch kein "mentales Modell". Total Anfänger.

Alle Beispiele, die ich betrachte, enthalten die --rmauszuführende Flagge, wie z

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

Frage:

Warum enthalten diese Befehle das --rmFlag? Ich würde denken, wenn ich mir die Mühe machen würde, einen Container mit den guten Sachen darin einzurichten oder herunterzuladen, warum sollte ich ihn dann entfernen? Ich möchte es behalten, um es wieder zu verwenden.

Ich weiß also, dass ich die falsche Vorstellung von Docker habe.

passende Momente
quelle
4
--rmEntfernt den gestoppten Container (den docker runerstellten) und nicht das Bild, auf dem er basiert (was Sie heruntergeladen haben).
Ry-
docker run --helpsollte nützlich sein. Wenn Sie nicht entfernen möchten, können Sie es übergeben
indapublic
1
Es muss so sein --rm, dass der Container automatisch bereinigt und das Dateisystem entfernt wird, wenn der Container beendet wird. Dies bedeutet nicht, dass das Material aus dem Container entfernt wird.
Mahattam
2
Sie laden keine Container herunter, Sie laden Bilder herunter. Lesen Sie hier, um die Unterschiede zwischen Bildern und Containern zu erfahren: docs.docker.com/engine/docker-overview/#docker-objects
axiac

Antworten:

92

Container sind lediglich eine Instanz des Images, mit dem Sie sie ausführen. Der Geisteszustand beim Erstellen einer containerisierten App besteht nicht darin, einen frischen, sauberen Ubuntu-Container zu nehmen und die Apps und Konfigurationen herunterzuladen, die Sie darin haben möchten, und sie dann laufen zu lassen.

Sie sollten den Container als Instanz Ihrer Anwendung behandeln, Ihre Anwendung ist jedoch in ein Image eingebettet. Die richtige Verwendung wäre das Erstellen eines benutzerdefinierten Bildes, in das Sie alle Ihre Dateien, Konfigurationen, Umgebungsvariablen usw. in das Bild einbetten. Lesen Sie mehr über Dockerfile und wie es gemacht wird hier

Sobald Sie dies getan haben, haben Sie ein Image, das alles enthält, und um Ihre Anwendung zu verwenden, führen Sie das Image einfach mit den richtigen Porteinstellungen oder anderen dynamischen Variablen aus docker run <your-image>

Das Ausführen von Containern mit --rmFlag ist gut für Container, die Sie nur für kurze Zeit verwenden, um etwas zu erreichen, z. B. um Ihre Anwendung in einem Container zu kompilieren oder um einfach zu testen, ob sie funktioniert. Dann wissen Sie, dass es sich um einen kurzlebigen Container handelt und Sie Teilen Sie Ihrem Docker-Dämon mit, dass Sie nach dem Ausführen alles löschen, was damit zusammenhängt, und den Speicherplatz sparen.

Kumpel123
quelle
Wäre die Übergabe der Umgebungsvariablen an Docker Run eine bessere Alternative? Auf diese Weise können Sie mit verschiedenen Konfigurationen beginnen (z. B. Produktion versus Vorproduktion)?
SCO
Die Prod vs Test-Umgebung ist ein gutes Beispiel, in dem Sie wahrscheinlich env vars verwenden möchten, um die Trennung vorzunehmen und Ihre App auf demselben Image auszuführen, jedoch mit unterschiedlichen Einstellungen für jeden env
buddy123
Gibt es eine Möglichkeit, die Container, die --rmbeim Schließen des Terminalfensters durch den Benutzer gestartet werden, automatisch zu löschen ? dh nicht absichtlich exitin der Container-Shell ausführen , sondern nur das Terminal-GUI-Fenster schließen. Ich habe festgestellt, dass Container in diesem Fall nicht gelöscht werden.
Venkrao
20

Das Flag --rmwird verwendet, wenn der Container nach Abschluss der Aufgabe gelöscht werden muss.

Dies ist für kleine Tests oder POC-Zwecke geeignet und erspart die Kopfschmerzen bei der Haushaltsführung.

Adnan Khan
quelle
16

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

Standardmäßig bleibt das Dateisystem eines Containers auch nach dem Beenden des Containers bestehen. Dies erleichtert das Debuggen erheblich (da Sie den Endstatus überprüfen können) und Sie behalten standardmäßig alle Ihre Daten bei. Wenn Sie jedoch kurzfristige Vordergrundprozesse ausführen, können sich diese Container-Dateisysteme wirklich häufen. Wenn Docker stattdessen den Container automatisch bereinigen und das Dateisystem entfernen soll, wenn der Container beendet wird, können Sie das Flag --rm hinzufügen

Mit kleinen Worten: Es ist nützlich, den Host von gestoppten und nicht verwendeten Containern sauber zu halten.

Sandro Modarelli
quelle
1

Ich verwende --rmbeim Herstellen einer Verbindung zu laufenden Containern einige Aktionen wie Datenbanksicherung oder Dateikopie. Hier ist ein Beispiel:

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

Oben wird ein laufender Container mit dem Namen 'app_postgres_1' verbunden und ein Backup erstellt. Sobald der Sicherungsbefehl abgeschlossen ist, wird der Container vollständig gelöscht.

Shoan
quelle