2017-04-08 3 views
0

Ich versuche herauszufinden, wie ich ein vorhandenes Bild aktualisieren kann, wenn ich Änderungen an dem lokalen Dateisystem, das zum Erstellen der Docker-Bild verwendet wurde. Ich dachte, dass ich Docker-Commits verwenden könnte, aber es scheint, dass Sie das Bild ändern können, wenn Änderungen an dem Dateisystem in einem laufenden Bild vorgenommen werden?Aktualisierung Docker Bild gegeben Änderungen an lokalen Dateisystem

/app.py 

build aus dem Dateisystem

sudo docker build -t app 

jetzt gibt es lokale Änderungen an /app.py. Wie ändere ich die Bild-App, um die Änderungen an /app.py widerzuspiegeln? Im Moment muss ich das alte Bild löschen und dann ein neues erstellen.

sudo docker rmi app 
sudo docker build -t app 

jede Hilfe ist willkommen!

Antwort

2

Zuerst gibt es keine running image, nur running container. Image ist etwas, das in Docker Art geliefert werden kann, Sie bauen Ihre image und starten dann eine container davon.

Um Ihr Problem, ich glaube, Sie Ihre Möglichkeiten erwähnt:

  1. Rebuild Ihr Bild
  2. Go in einem Laufbehälter, Änderungen vornehmen und docker commit es zurück. Persönlich verwende ich nur diesen Weg, um ein kleines Problem zu beheben oder einen Hotfix zu meinem Bild zu machen, wenn docker build eine sehr lange Zeit braucht.

Docker verwendet union FS mit copy on write Bild zu bauen, was bedeutet, wenn Sie eine Änderung an ein Bild machen möchten, können Sie es an Ort und Stelle nicht ändern kann, es zusätzliche Schicht erstellen werden (n) Ihre Änderung widerzuspiegeln (s), wird in einigen Fällen nur der gleiche Bildname verwendet. Und aus der Perspektive der Lieferung, ich denke, es ist völlig in Ordnung, ein neues Bild (mit verschiedenen Tag) für jede Version zu bauen, oder sogar sollte es so gemacht werden, deshalb haben Sie eine Dockerfile, und Bilder sind nicht nur etwas, was Sie starten Ihr Container, sie sind tatsächlich Versionslieferungsartefakte und Sie können zu jeder Version zurückkehren, wenn Sie wollen/brauchen. Also ich denke, Ihre aktuelle Lösung ist in Ordnung.

Noch ein paar Worte hier: für die lokale Entwicklung und Test, können Sie einfach montieren Ihre /app.py als Volume zu Ihrem Container, wenn Sie es starten, so etwas wie docker run -v /path/to/host/app.py:/path/to/container/app.py your_base_image_to_run_app, dann alles, was Sie auf Ihrem lokalen FS zu app.py geändert, es‘ lle reflektiere den Behälter. Wenn du deinen Job fertig hast, baue ein neues Bild.

0

Nach Ihrem aktuellen Design-Lösung ist es, ein neues Bild zu erstellen und gleichen Tag zuweisen.

Die beste Lösung besteht darin, Umgebungsvariablen von docker image auszustellen und diese Variable zu verwenden, um app.py zu aktualisieren, sodass Sie das Bild nicht jedes Mal ändern müssen.Nur ein Bild ist ausreichend.

+0

Also meinst du das Docker-Image-Dateisystem öffnen und die Änderungen direkt dort vornehmen? – chris

+0

Sie können immer in den Container gehen und das Dateisystem ändern und ein neues Image daraus erstellen. Aber es ist nicht ideal, wenn die Änderung auf demselben Wert oder derselben Konfiguration basiert. Was ich sage ist, dass, wenn Änderungen im Bild häufig sind, verwenden Sie Umgebungsvariablen, um Konfigurationsänderungen einzubeziehen. Verwenden Sie diese Variablen und aktualisieren Sie die app.py-Datei entsprechend. –

Verwandte Themen