2015-01-23 20 views
6

Sto lavorando alla creazione di alcune immagini di finestra mobile da utilizzare per il test su macchine di sviluppo. Ho in programma di costruirne uno per la nostra app principale e uno per ciascuna delle nostre dipendenze esterne (postgres, elasticsearch, ecc.). Per l'app principale, sto lottando con la decisione di scrivere un Dockerfile o compilare un'immagine da ospitare.Dockerfile vs Docker image

Da un lato, un Dockerfile è facile da condividere e modificare nel tempo. D'altra parte, mi aspetto che la configurazione avanzata (la personalizzazione dei file delle proprietà dell'applicazione) sarà molto più facile da fare in vim prima di semplicemente inviare una nuova immagine.

Capisco che posso ottenere lo stesso risultato in entrambi i casi, ma sto cercando PRO, CONS e trucchi con entrambe le direzioni.

Come nota a margine, ho intenzione di completare tutto questo utilizzando Fig. La mia impressione iniziale di questo strumento è stata molto positiva.

Grazie!

+1

Stessa discussione della distribuzione di un'applicazione come codice sorgente o binario compilato –

+0

Un modo interessante per dirlo. Non ci avevo pensato in quel modo. –

risposta

9

Utilizzando un Dockerfile:

  • si dispone di un 'registro di controllo' che descrive come l'immagine viene costruita. Per me è fondamentale se verrà utilizzato in una pipeline di produzione in cui lavorano più persone e la manutenibilità dovrebbe essere una priorità.
  • È possibile automatizzare il processo di costruzione dell'immagine, essendo un modo semplice di aggiornare il contenitore con gli aggiornamenti di sistema o se deve prendere parte a una pipeline di consegna continua.
  • Si tratta di un modo più pulito di creare strati di contenitore (ogni comando Dockerfile è un altro livello)

Modifica di un contenitore e commettere i cambiamenti è grande per scopi di test e di sviluppo veloce per una prova concettuale . Ma se pensate di usare l'immagine del risultato per un po 'di tempo, utilizzerei sicuramente Dockerfiles.

Oltre a questo, se si deve modificare un file e farlo utilizzando gli strumenti di bash (awk, sed ...) risulta molto noioso, è possibile aggiungere qualsiasi file desiderato dall'esterno durante il processo di costruzione.

+0

Suppongo che la mia idea iniziale di poter creare un Dockerfile e semplicemente inviarlo via email a chiunque senza contesto sia un po 'imperfetto. Piuttosto che modificare i file di configurazione come comandi RUN, sto iniziando a vedere che aggiungerli come volumi è ancora un buon mezzo senza andare fino all'impazzata di commettere un'immagine. –

6

Sono totalmente d'accordo con Javier ma è necessario capire che un'immagine creata con un file di dock può essere diversa con una build di immagine con la stessa versione del file di dock 1 giorno dopo.

forse nel vostro processo di compilazione di recuperare automaticamente Ultimi aggiornamenti di un'applicazione o del sistema operativo, ecc ...

E in questo momento, se avete bisogno di riprodurre un crash o tutto ciò che non si può fare affidamento sul dockerfile.

+0

Questo mi ha aiutato molto. Non posso credere di non averlo pensato prima! – Baub

+2

I file Dockerfiles devono specificare completamente le versioni delle cose che chiamano e includono, oppure si otterrà il comportamento irreprodabile descritto qui. Se un dockerfile (o un makefile o uno strumento di compilazione) produce risultati diversi per diverse esecuzioni, allora è scritto male.Se lo strumento di compilazione sta tirando da una qualche forma di repository che non ti consente di ottenere ogni volta la stessa cosa, allora il repository è progettato in modo errato. – stevegt