2016-06-20 55 views
9

Supponendo Ho una serie di immagini che dipendono un'immagine di base comune in:Costruzione dipendenze incontrate con finestra mobile-comporre

  • base (questo è solo un insieme di dipendenze comuni)

    FROM ubuntu:16.04 
    
    ENV FOO 1 
    
  • child1

    FROM mybaseimage # where mybaseimage corresponds to base 
    
    CMD ["bar1_command"] 
    
  • child2

    FROM mybaseimage # where mybaseimage corresponds to base 
    
    CMD ["bar2_command"] 
    

E 'possibile creare file di docker-compose che costruire base senza eseguirlo? Diciamo che ho seguenti dipendenze:

version: '2' 
services: 
    child1: 
     build: ./path-to-child1-dockerfile 
services: 
    child2: 
     build: ./path-to-child2-dockerfile 
    depends_on: 
     - child1 

vorrei base essere costruire anche se non si avvia in modo esplicito. È possibile qualcosa del genere? O dovrei semplicemente usare Makefile esterno per costruire dipendenze?

build_base: 
    docker build -t mybaseimage mybaseimage 

build_all: build_base 
    docker-compose build 

risposta

8

Utilizzare un Makefile. docker-compose non è progettato per creare catene di immagini, è progettato per l'esecuzione di contenitori.

Potresti anche essere interessato a dobi che è uno strumento di automazione delle build (come la marca) progettato per funzionare con immagini e contenitori di finestra mobile.

Disclaimer: io sono l'autore di dobi

-2

Questo funziona in finestra mobile-compongo 1.8.1

+7

Puoi fornire i dettagli? –

+0

Chiedere scusa per non aver fornito ulteriori dettagli. @birchlabs rispondere sopra è ciò che funziona. – robbin

4

E 'possibile. C'è una sorta di soluzione alternativa. Sei vicino, ma ti mancavano tag espliciti per le immagini (quindi hai avuto poca capacità sulle immagini dei bambini di dichiarare quale immagine hai ereditato).

version: '3.2' 
services: 
    base: 
    image: mybaseimage 
    build: ./path-to-base-dockerfile 
    child1: 
    build: ./path-to-child1-dockerfile 
    depends_on: 
     - base 
    child2: 
    build: ./path-to-child2-dockerfile 
    depends_on: 
     - base 

Diciamo che non sono state create immagini. Corri allo docker-compose up. Accadono le seguenti cose:

  • docker-compose vede che i servizi child1 e child2 dipendono dalla base. Quindi distribuirà prima la base.
  • docker-compose vede che non hai ancora taggato alcuna immagine come mybaseimage. Sa come creare mybaseimage (gli hai dato un percorso di costruzione), quindi lo costruirà ora e lo tagga come mybaseimage.
  • docker-compose distribuisce il servizio base.
    • idealmente si dovrebbe progettare base in modo che si chiude immediatamente, o non ha un punto di accesso. dal momento che non lo facciamo in realtà vogliamo che esegua questo servizio.
  • finestra mobile-composizione considera la distribuzione child1 e child2
  • finestra mobile-composizione vede che non hai ancora etichettato qualsiasi immagine come child1.Sa come creare child1 (gli hai dato un percorso di costruzione), quindi lo costruirà ora e lo tagga come child1.
  • finestra mobile-composizione distribuisce il servizio di child1
  • stessa sequenza di passi per child2

Il prossimo docker-compose up sarà più semplice (abbiamo etichettato immagini disponibili, in modo da saltare tutto passi costruire).

Se si dispone già di immagini con tag e si desidera ricostruire: utilizzare docker-compose build per comunicare a tutte le immagini (si, base e bambini saranno entrambi ricostruiti).

Problemi correlati