Ich bin ein bisschen verwirrt über diese beiden Optionen. Sie scheinen verwandt zu sein. Sie sind jedoch nicht wirklich kompatibel.
Zum Beispiel scheint es, dass die Verwendung von Dockerfiles bedeutet, dass Sie sich nicht wirklich auf Bilder festlegen sollten, da Sie die Dockerfile wirklich nur in Git verfolgen und Änderungen daran vornehmen sollten. Dann gibt es keine Unklarheit darüber, was maßgeblich ist.
Image-Commits scheinen jedoch sehr nett zu sein. Es ist so großartig, dass Sie einfach einen Container direkt ändern und die Änderungen markieren können, um ein anderes Bild zu erstellen. Ich verstehe, dass Sie sogar so etwas wie ein Dateisystem von einem Image-Commit-Verlauf unterscheiden können. Genial. Aber dann sollten Sie keine Docker-Dateien verwenden. Andernfalls müssten Sie, wenn Sie ein Image-Commit durchgeführt haben, zu Ihrer Docker-Datei zurückkehren und einige Änderungen vornehmen, die das darstellen, was Sie getan haben.
Also bin ich hin und her gerissen. Ich liebe die Idee von Image Commits: Sie müssen Ihren Bildstatus nicht in einer Docker-Datei darstellen - Sie können ihn einfach direkt verfolgen. Es ist mir jedoch unangenehm, die Idee einer Manifestdatei aufzugeben, die Ihnen einen schnellen Überblick über die Inhalte eines Bildes gibt. Es ist auch beunruhigend, zwei Funktionen im selben Softwarepaket zu sehen, die nicht kompatibel zu sein scheinen.
Hat jemand irgendwelche Gedanken dazu? Wird es als schlechte Praxis angesehen, Image-Commits zu verwenden? Oder sollte ich einfach meinen Anhang loslassen, um Dateien aus meinen Puppet-Tagen zu manifestieren? Was soll ich machen?
Update :
Allen, die dies für eine meinungsbasierte Frage halten, bin ich mir nicht so sicher. Es gibt einige subjektive Eigenschaften, aber ich denke, es ist meistens eine objektive Frage. Darüber hinaus glaube ich, dass eine gute Diskussion zu diesem Thema informativ sein wird.
Am Ende hoffe ich, dass jeder, der diesen Beitrag liest, ein besseres Verständnis dafür bekommt, wie Dockerfiles und Image-Commits miteinander zusammenhängen.
Update - 18.07.2017 :
Ich habe kürzlich eine legitime Verwendung für Image-Commits entdeckt. Wir haben gerade eine CI-Pipeline in unserem Unternehmen eingerichtet und während einer Phase der Pipeline werden unsere App-Tests in einem Container ausgeführt. Wir müssen die Abdeckungsergebnisse aus dem verlassenen Container abrufen, nachdem der Test-Runner-Prozess sie generiert hat (im Dateisystem des Containers) und der Container nicht mehr ausgeführt wird. Dazu verwenden wir Image-Commits, indem wir den gestoppten Container festschreiben, um ein neues Image zu erstellen, und dann Befehle ausführen, mit denen die Coverage-Datei angezeigt und an stdout ausgegeben wird. Das ist also praktisch. Abgesehen von diesem sehr speziellen Fall verwenden wir Dockerfiles, um unsere Umgebungen zu definieren.