2016-09-04 2 views
1

Es sieht aus wie jedes Volumen Bindung (-v) verwendet, wenn Sie run ein Basisbild wird nicht in der abgeleiteten Bild festgehalten werden, dass Sie sich verpflichten, und das Volumen Bindungsoption muss sein Jedes Mal, wenn Sie das abgeleitete Bild run übergeben.Docker Volumen Bindung: Basis Bild vs Derivat Bild

Beispiel:


docker run -it -v /opt/hostappsdir:/apps ubuntu 

Änderungen in dem Behälter (genannt: john_doe) und verpflichten sich zu einem neuen Bild (local/Test)

docker commit john_doe local/test 

Dann listet das die Dateien in dem Host-Verzeichnisnicht auf

docker run --rm local/test ls /apps 

aber man tut es

docker run --rm -v /opt/hostappsdir:/apps local/test ls /apps 

Gibt es eine Möglichkeit, die Lautstärke vermeiden kann Passieren jeder Bindung Option?

+0

Es wäre hilfreich, wenn die Person, die meine Frage abgelehnt hat, erklärt, was damit nicht stimmt. – devlent

+0

Ok. Korrigiert den Syntaxfehler im Commit-Befehl. Warten auf eine Antwort ... – devlent

+0

Ich habe auch keine Ahnung, warum diese Frage abgelehnt wurde - es ist eine legitime Kontroverse und somit eine gültige Frage zur Klarstellung –

Antwort

3

Volumes sind definitionsgemäß nicht Teil der Layer des Containers und daher nicht Teil der Layer, die Sie beim Erstellen eines Images aus dem Container übernehmen.

Wenn Sie z.B. Fügen Sie eine spezifische Konfiguration hinzu, fügen Sie einige Erweiterungen hinzu, fügen Sie einige Pakete hinzu, sollten Sie immer vom Basisbild ableiten, niemals nur willkürliche, nicht formalisierte Änderungen "committen".

erstellen Dockerfile mit

from <baseimage> 
COPY yourconfig /etc/somewhere 
COPY yourasset /var/www 

RUN sed ... \ // change some configuration 
    && apt-get update && apt-get install curl // some packages 

Hinweis: Ich mache mir die Idee nicht, wie von „commiting ändert einen Behälter zu einem Bild“ - das ist riskant, nicht produziert das gleiche Ergebnis jedes Mal und mehr über , formalisiert nicht, was Sie tatsächlich geändert haben. Sie werden es schwer haben, Ihr Image aufgrund von Updates des Basis-Images zu aktualisieren, da Sie nicht wissen, was Sie getan haben - und selbst wenn Sie es aufgeschrieben haben, ist es eine Menge Aufwand, dies wieder zu tun, und wieder nochmal.

+0

Danke. Die erste Zeile in Ihrer Antwort ist die Antwort, die ich wollte. Die Änderungen, die ich meinte, sind für das Hinzufügen von zusätzlichen apt-Paketen. Code-Änderungen werden nur für das Host-Verzeichnis durchgeführt, das an den Container gebunden wird. – devlent

+0

Ich lebte wahrscheinlich unter einem Stein oder so, aber ich habe gerade von 'docker-compose' gelernt ... Wow! Das war die Art von Dingen, die ich erwartet hatte, und docker-compose hat alle Bash-Skripte, die ich geschrieben habe, total überflüssig gemacht! – devlent