Sono un po 'confuso riguardo a queste due opzioni. Sembrano essere correlati. Tuttavia, non sono realmente compatibili.Devo utilizzare Dockerfiles o immagine commit?
Ad esempio, sembra che l'uso di Dockerfiles significhi che non dovresti realmente impegnarti con le immagini, perché dovresti semplicemente tracciare il Dockerfile in git e apportare modifiche a questo. Quindi non c'è alcuna ambiguità su ciò che è autorevole.
Tuttavia, i commit dell'immagine sembrano davvero belli. È così bello che puoi modificare direttamente un contenitore e taggare le modifiche per creare un'altra immagine. Capisco che puoi anche ottenere qualcosa di simile a un file system diff da una cronologia di commit delle immagini. Eccezionale. Ma allora non dovresti usare Dockerfiles. Altrimenti, se hai fatto un commit di immagine, dovresti tornare al tuo Dockerfile e fare qualche cambiamento che rappresenta ciò che hai fatto.
Quindi sono distrutto. Adoro l'idea dell'impegno dell'immagine: che non devi rappresentare lo stato dell'immagine in un Dockerfile: puoi semplicemente tracciarlo direttamente. Ma sono a disagio nel rinunciare all'idea di una sorta di file manifest che ti offre una rapida panoramica di cosa c'è in un'immagine. È anche sconcertante vedere due funzionalità nello stesso pacchetto software che sembrano incompatibili.
Qualcuno ha qualche idea su questo? È considerata una cattiva pratica usare i commit delle immagini? O dovrei lasciare andare il mio allegato per manifestare i file dai giorni di Puppet? Cosa dovrei fare?
Aggiornamento:
A tutti coloro che pensano che questa è una domanda di parere a base, io non sono così sicuro. Ci sono alcune qualità soggettive, ma penso che sia soprattutto una domanda obiettiva. Inoltre, credo che una buona discussione su questo argomento sarà informativa.
Alla fine, spero che chiunque leggendo questo post possa capire meglio come i Dockerfile e l'immagine si commettono l'uno con l'altro.
Update - 2017/07/18:
Ho da poco scoperto un uso legittimo per un'immagine impegna. Abbiamo appena creato una pipeline CI nella nostra azienda e, durante una fase della pipeline, i nostri test delle app vengono eseguiti all'interno di un container. Abbiamo bisogno di recuperare i risultati della copertura dal contenitore uscito dopo che il processo del test runner li ha generati (nel file system del contenitore) e il contenitore ha smesso di funzionare. Usiamo l'image commit per fare ciò impegnando il container fermato per creare una nuova immagine e quindi eseguendo comandi che visualizzano e riversano il file di copertura sullo stdout. Quindi è utile avere questo. Oltre a questo caso molto specifico, utilizziamo i Dockerfiles per definire i nostri ambienti.
C'è molta filosofia qui, e le filosofie delle persone sono diverse, rendendo questa forse una brutta domanda per SO. La mia filosofia, però, vuoi sempre sapere esattamente come riprodurre una determinata immagine, e assicurati di farlo. Usando le immagini d'oro, è molto facile non sapere come qualcuno ha ottenuto dallo stato A allo stato B, mentre con l'automazione che guida il processo di costruzione, non c'è modo di dimenticare. Quindi, personalmente, sì, chiamo Dockerfiles the Right Thing, e l'immagine commette (come * qualsiasi * tipo di immagine dorata che si basa sull'intervento manuale per costruire) il male. Ma sono io e YMMV. –
@CharlesDuffy Dove dovrebbe andare questa domanda se non appartiene a SO? –
@CharlesDuffy A proposito, non sono d'accordo che questa sia una domanda basata sull'opinione pubblica. Ci dovrebbe essere una risposta giusta qui, se non una risposta giusta che dipende da un piccolo contesto in più. Per fortuna, ho votato per spostare la mia domanda su Serverfault. –