Jestem trochę zdezorientowany tymi dwiema opcjami. Wydają się być spokrewnieni. Jednak nie są one tak naprawdę kompatybilne.
Na przykład wydaje się, że używanie Dockerfiles oznacza, że nie powinieneś tak naprawdę angażować się w obrazy, ponieważ tak naprawdę powinieneś po prostu śledzić plik Dockerfile w git i wprowadzać w nim zmiany. Wtedy nie ma dwuznaczności co do tego, co jest autorytatywne.
Jednak zmiany obrazu wydają się naprawdę ładne. To tak wspaniałe, że możesz po prostu bezpośrednio zmodyfikować kontener i oznaczyć zmiany, aby utworzyć inny obraz. Rozumiem, że możesz nawet uzyskać coś w rodzaju różnicy systemu plików z historii zatwierdzania obrazu. Niesamowite. Ale wtedy nie powinieneś używać Dockerfiles. W przeciwnym razie, jeśli dokonałeś zatwierdzenia obrazu, będziesz musiał wrócić do swojego pliku Dockerfile i wprowadzić jakąś zmianę, która reprezentuje to, co zrobiłeś.
Więc jestem rozdarty. Podoba mi się idea zatwierdzeń obrazu: nie musisz przedstawiać stanu obrazu w pliku Dockerfile - możesz go po prostu śledzić bezpośrednio. Ale niepokoję się rezygnacją z pomysłu na jakiś rodzaj pliku manifestu, który daje szybki przegląd tego, co jest na obrazie. Niepokojące jest również zobaczenie dwóch funkcji w tym samym pakiecie oprogramowania, które wydają się niekompatybilne.
Czy ktoś ma jakieś przemyślenia na ten temat? Czy używanie zatwierdzeń obrazu jest uważane za złą praktykę? A może powinienem po prostu puścić mój załącznik, aby zamanifestować pliki z dni Puppet? Co powinienem zrobić?
Aktualizacja :
Do wszystkich, którzy uważają, że jest to pytanie oparte na opiniach, nie jestem tego taki pewien. Jest w tym kilka subiektywnych cech, ale myślę, że jest to głównie pytanie obiektywne. Ponadto uważam, że dobra dyskusja na ten temat będzie miała charakter informacyjny.
Na koniec mam nadzieję, że każdy, kto czyta ten post, lepiej zrozumie, w jaki sposób pliki Dockerfiles i zobowiązania dotyczące obrazu odnoszą się do siebie.
Aktualizacja - 2017/7/18 :
Niedawno odkryłem legalne użycie zatwierdzeń obrazu. Właśnie utworzyliśmy potok CI w naszej firmie i podczas jednego etapu potoku nasze testy aplikacji są uruchamiane wewnątrz kontenera. Musimy pobrać wyniki pokrycia z opuszczonego kontenera po wygenerowaniu ich przez proces uruchamiający testy (w systemie plików kontenera) i zatrzymaniu działania kontenera. Używamy do tego zatwierdzeń obrazu, zatwierdzając zatrzymany kontener w celu utworzenia nowego obrazu, a następnie uruchamiając polecenia, które wyświetlają i zrzucają plik pokrycia na standardowe wyjście. Więc warto to mieć. Oprócz tego bardzo konkretnego przypadku używamy Dockerfiles do definiowania naszych środowisk.