2014-12-09 21 views
12

sto guadagnando conoscenza Docker e ho le seguenti domandeDove conservare Dockerfile in un progetto?

  • Dove sono di Dockerfile conservato in un progetto?
    • Sono essi conservati insieme con la fonte?
    • Sono tenuti fuori dalla fonte? Avete un proprio repository Git solo per il Dockerfile?

Se il server CI dovrebbe creare una nuova immagine per ogni generazione ed eseguire che sul server di prova, si fa a mantenere l'immagine precedente? Voglio dire, tagga l'immagine precedente o rimuovi l'immagine precedente prima di crearne una nuova?

Sono uno sviluppatore Java EE in modo da uso Maven, Jenkins ecc se quella materia.

risposta

4

L'unica restrizione su dove viene conservato un file Docker è che tutti i file aggiunti all'immagine devono essere al di sotto del file Docker nel file system. Io di solito li vedo al livello più alto di progetti, anche se ho un repo che combina una serie di piccole immagini in cui ho qualcosa di simile

top/ 
    project1/ 
    Dockerfile 
    project1_files 
    project2/ 
    Dockerfile 
    project2_files 

La finestra mobile plug-Jenkins può puntare a una directory arbitraria con un Dockerfile, così questo è facile. Per quanto riguarda la CI, la strategia più comune che ho visto è quella di taggare ogni immagine costruita con CI come 'ultima'. Questo è l'impostazione predefinita se non si aggiunge un tag a una build. Quindi le versioni ricevono i propri tag. Pertanto, se si esegue un'immagine senza argomenti, si ottiene l'ultima immagine creata da CI, ma se si desidera una versione specifica è facile dirlo.

+0

Ma è necessario un Dockerfile per il database, uno per il server delle applicazioni, i contenitori del volume di dati e così via? Come lo organizzi? – LuckyLuke

+0

Con il layout che ho sopra, è possibile avere i componenti come sottodirectory, quindi utilizzare top/fig.yml per avviare e collegare i contenitori. – seanmcl

1

Suggerirei di mantenere il Dockerfile con la sorgente come se fosse un makefile.

Il problema del contesto di build significa che la maggior parte dei Dockerfile è conservata al livello principale o vicino al progetto. È possibile aggirare questo problema utilizzando script o strumenti di generazione per copiare Dockerfiles o cartelle di origine, ma diventa un po 'doloroso.

Non sono a conoscenza delle best practice in merito ai tag e al CI. Tagging con l'hash git o simili potrebbe essere una buona soluzione. Ti consigliamo di conservare almeno una generazione di vecchie immagini nel caso in cui sia necessario eseguire il rollback.

+1

Ma è necessario un Dockerfile per il database, uno per il server delle applicazioni, i contenitori del volume di dati e così via? Come lo organizzi? – LuckyLuke

+1

Probabilmente si può usare lo stesso Dockerfile per il database e i contenitori di dati. Ma sì, devi mettere i Dockerfiles in directory separate o usare gli strumenti di compilazione per copiare le cose. –

Problemi correlati