2013-07-30 37 views
31

Utilizzando la finestra mobile, è possibile creare immagini basate su altre immagini in modo molto gradevole. Ad esempio, puoi creare un'immagine Java-jdk7 (basata sull'ultimo Ubuntu LTS), e sulla base di ciò creare immagini elastic-search e tomcat7 (che hanno entrambi bisogno di java).Come gestire le dipendenze delle immagini della finestra mobile (manutenzione)

Quindi, se non codici nei miei immagini, io alla fine con la seguente (estratto di docker images):

╔══════════════════════╦════════╦══════════════╗ 
║  REPOSITORY  ║ TAG ║  ID  ║ 
╠══════════════════════╬════════╬══════════════╣ 
║ ubuntu    ║ 12.04 ║ 8dbd9e392a96 ║ 
║ quintenk/jdk7-oracle ║ latest ║ 8928245086f4 ║ 
║ quintenk/tomcat7  ║ latest ║ 995cdb2cbfa8 ║ 
║ quintenk/elastics ║ latest ║ 123abc456ef2 ║ 
╚══════════════════════╩════════╩══════════════╝ 

Ora per la domanda. Come/dovrei mantenere questa dipendenza? Come eseguo l'immagine di mantenimento 1 e le immagini dipendenti?

  1. Se aggiorno la mia immagine jdk (apt-get upgrade per esempio), suppongo di non danneggiare le immagini dipendenti? Tuttavia, suppongo anche che l'albero delle dipendenze non sia come ci si aspetterebbe più. [UPDATE: Ho riprodotto questo, quindi vedi la mia risposta qui sotto]
  2. Se 1 è corretto, c'è un modo in cui posso avere il flag delle immagini dipendenti come obsoleto, e (si spera) farli ricostruire da soli?

Oppure è la strada da percorrere per contrassegnare i contenitori con un numero di versione e rigenerare e ridistribuire manualmente tutte le dipendenze con i tag numero di versione aumentato? Ciò significherebbe che i Dockerfiles avrebbero bisogno di essere modificati per un aggiornamento.

AGGIORNAMENTO: Ho trovato la seguente immagine sul sito di docker nel loro presentation. Tuttavia, non sono abbastanza sicuro dei passaggi su come farlo (specialmente con le dipendenze su altre immagini come ho descritto).

Update flow for docker containers

+0

http://docs.docker.com/docker-hub/builds/#repository-links la soluzione desiderata? Ricostruisce tutte le immagini dipendenti se le modifiche vengono apportate alle immagini di base. –

+0

@WeiChing infatti - questa sarebbe la nuova risposta. Certo, questa è una brutta cosa senza test automatici – qkrijger

risposta

9

Questo è un grande caso d'uso. Invia una richiesta di miglioramento allo Docker issues page.

Un modo semplice per ora è quello di mantenere i Dockerfiles e aggiornare da lì, ricostruendo le immagini quando si vuole fare un cambiamento intenzionale.

+0

. Non lo vedo ancora, quindi suppongo che verrà esaminato prima che venga pubblicato. – qkrijger

+2

Questa è la richiesta di miglioramento: https: // github.it/dotcloud/docker/issues/1379 che è stato chiuso a favore di questo: https://github.com/dotcloud/docker/issues/2936 – seanf

5

In risposta alla

Se aggiorno la mia immagine jdk (apt-get upgrade per esempio), suppongo non lo faccio corrompere le immagini dipendenti? Tuttavia, suppongo anche che l'albero delle dipendenze non sia come ci si aspetterebbe più.

Ho verificato questo aggiornando un'immagine dipendente e verificando le dipendenze. Quello che si ottiene è davvero uno stato valido, ma l'immagine dipendente non è basata sull'immagine che ci si aspetterebbe più ingenuamente:

docker dependency tree

0

mi sento usando multi-stage builds può anche essere utile per evitare tali insidie. Ti aiuterà a mantenere un singolo file docker per ogni applicazione.

Problemi correlati