2015-01-23 10 views
6

Ich arbeite an der Erstellung einiger Docker Images zum Testen auf Dev-Maschinen verwendet werden. Ich plane, einen für unsere Hauptanwendung sowie einen für jede unserer externen Abhängigkeiten (postgres, elasticsearch, usw.) zu bauen. Für die Haupt-App habe ich Schwierigkeiten mit der Entscheidung, eine Docker-Datei zu schreiben oder ein Bild zu kompilieren, das gehostet werden soll.Dockerfile vs Docker Bild

Auf der einen Seite ist eine Dockerfile leicht im Laufe der Zeit zu teilen und zu ändern. Auf der anderen Seite erwarte ich, dass die erweiterte Konfiguration (Anpassen von Anwendungseigenschaftsdateien) in vim viel einfacher ist, bevor Sie einfach ein neues Bild festschreiben.

Ich verstehe, dass ich auf die gleiche Weise zum gleichen Ergebnis kommen kann, aber ich suche nach PROS, CONS und gotchas mit beiden Richtungen.

Als eine Randnotiz, ich plane dies alles zusammen mit Fig. Mein erster Eindruck von diesem Tool war sehr positiv.

Danke!

+1

Die gleiche Diskussion wie die Verteilung einer Anwendung als Quellcode oder kompilierte Binärdatei –

+0

Interessante Weise, es zu sagen. So hatte ich es nicht gedacht. –

Antwort

9

eine Dockerfile Verwendung:

  • Sie haben ein Überwachungsprotokoll, das beschreibt, wie das Bild aufgebaut wird. Für mich ist das von grundlegender Bedeutung, wenn es in einer Produktionspipeline eingesetzt wird, in der mehr Menschen arbeiten und Wartbarkeit eine Priorität sein sollte.
  • Sie können den Erstellungsprozess Ihres Images automatisieren, indem Sie den Container einfach mit Systemupdates aktualisieren oder wenn er an einer fortlaufenden Lieferpipeline teilnehmen muss. für Testzwecke groß ist und für die schnelle Entwicklung
  • Es ist ein sauberer Weg, um die Schichten des Containers von erstellen (jeder Dockerfile Befehl ist eine andere Schicht)

einen Container ändern und die Änderungen kommen für einen begrifflichen Test . Aber wenn Sie das Ergebnisbild für einige Zeit verwenden möchten, würde ich definitiv Dockerfiles verwenden.

Abgesehen davon, wenn Sie eine Datei ändern müssen und es mit Bash-Tools (awk, sed ...) Ergebnisse sehr mühsam tun, können Sie jede gewünschte Datei von außerhalb während des Bauprozesses hinzufügen.

+0

Ich nehme an, dass meine anfängliche Idee, dass ich eine Dockerfile erstellen und einfach per E-Mail an jemanden ohne Kontext senden könnte, ein bisschen fehlerhaft ist. Anstatt Konfigurationsdateien als RUN-Befehle zu bearbeiten, beginne ich zu sehen, dass das Hinzufügen als Volumes immer noch ein nettes Medium ist, ohne den vollen Knirsch eines Bildes zu machen. –

6

Ich stimme Javier vollkommen zu, aber Sie müssen verstehen, dass ein Bild, das mit einer Dockerdatei erstellt wurde, mit einem Bild identisch sein kann, das mit derselben Version der Dockerdatei einen Tag später erstellt wurde.

vielleicht in Ihrem Build-Prozess abrufen automatisch letzten Updates einer App oder das o etc ...

Und in dieser Zeit, wenn Sie einen Absturz reproduzieren müssen oder was auch immer Sie auf der dockerfile nicht verlassen kann.

+0

Das hat mir sehr geholfen. Ich kann nicht glauben, dass ich vorher nicht darüber nachgedacht habe! – Baub

+2

Dockerfiles müssen vollständig die Versionen der Dinge angeben, die sie aufrufen und einschließen, oder Sie erhalten das hier beschriebene nicht reproduzierbare Verhalten. Wenn eine Dockerdatei (oder ein Makefile oder ein Build-Tool) unterschiedliche Ergebnisse für verschiedene Läufe erzeugt, wird sie falsch geschrieben.Wenn das Build-Tool von einem Repository ausgeht, mit dem Sie nicht jedes Mal dasselbe erhalten, dann ist das Repository falsch konstruiert. – stevegt