Docker aktualisiert das Bild, wenn sich die Docker-Datei ändert


72

Ich spiele mit Docker, indem ich eine Dockerfilemit einigen NodeJS-Anweisungen erstelle. Jedes Mal, wenn ich Änderungen an der Docker-Datei vornehme, erstelle ich das Image neu, indem ich es sudo docker build -t nodejstest .in meinem Projektordner ausführe. Dadurch wird jedoch jedes Mal ein neues Image erstellt und meine SSD wird bald verschluckt.

Gibt es eine Möglichkeit, ein vorhandenes Image zu aktualisieren, wenn ich die Docker-Datei ändere, oder muss ich jedes Mal, wenn ich Änderungen an der Datei vornehme, ein neues erstellen?

Entschuldigung, wenn es eine dumme Frage ist


Überhaupt keine blöde Frage.
Herr Chow

Antworten:


54

Docker Build Support Caching, solange keine ADDAnweisung vorhanden ist. Wenn Sie aktiv Dateien entwickeln und ändern, wird nur das, was nach dem ADDliegt, neu erstellt.

Seit 0.6.2 (heute geplant) können Sie dies tun docker build --rm .und es werden die temporären Container entfernt. Die Bilder bleiben jedoch erhalten.

Um die verwaisten Bilder zu entfernen, können Sie sie mit docker imagesauschecken und docker rmi <id>eines davon ausführen . Ab sofort gibt es eine automatische Bereinigung und alle Bilder ohne Tags (Waisen, frühere Builds) werden entfernt.


2
Warnung: '-rm' ist veraltet und wird bald durch '--rm' ersetzt.
Branch14

3
Diese Antwort sollte wahrscheinlich aktualisiert werden mit --rm; Es ist immer noch eine der Top-Antworten für eine Google-Suche "Docker Update Image".
Andrew Sannier

17

Laut diesem Best Practices-Handbuch werden die ersten Zeilen Ihrer Docker-Datei, wenn Sie sie gleich lassen, auch zwischengespeichert und dieselben Images für zukünftige Builds wiederverwendet


2
Das ist etwas, das ich an Docker liebe!
e18r

1

Während der Entwicklung ist es weniger sinnvoll, für jedes Commit einen ganzen Container neu zu erstellen. Später können Sie die Erstellung eines Docker-Containers mit Ihrem neuesten Code als Teil Ihres QS- / Bereitstellungsprozesses automatisieren.

Grundsätzlich können Sie einen minimalen Container erstellen, der Code -v /home/myuser/mynode:/home/myuser/mynodeabruft (mit git beim Starten des Containers oder mit ENTRYPOINT zum Ausführen des Knotens).

Siehe meine Antwort auf diese Frage:

Docker Rails App und Git

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.