2015-10-29 36 views
12

Il modo migliore per avviare la nostra applicazione è utilizzando una finestra mobile per comporre noi stessi. La finestra mobile-compose avvia tutti i servizi con la configurazione corretta.L'ereditarietà o l'annidamento con la finestra mobile compongono

Ora vorremmo fornire una finestra mobile-compose in cui l'applicazione viene eseguita con un back-end diverso. In questa composizione 8 servizi su 10 sono uguali e 2 sono diversi.

Come ottenere ciò senza la duplicazione del codice? Vedo che un servizio può estendere un servizio da un altro file di composizione docker, tuttavia questo richiederebbe comunque di elencare tutti i 10 servizi in entrambi i file.

risposta

11

Il modo più semplice per ottenere ciò è creare un secondo file di composizione. Nella seconda file, è possibile utilizzare la funzione extend di Docker Compose, che consente di "ereditare" servizi da un altro file: https://docs.docker.com/compose/extends/

Assumendo che il file originale è docker-compose.yaml, è possibile creare un swap-backend-compose.yaml:

service-one: 
    extends: 
    file: docker-compose.yaml 
    service: service-one 

service-two: 
    extends: 
    file: docker-compose.yaml 
    service: service-two 
    environment: 
    - BACKEND=some_other_value 

... e così via.

+0

Grazie. Tuttavia questo richiede ancora di elencare tutti i 10 servizi nel file 'swap-backen-compose.yaml' e se aggiungo un nuovo servizio devo modificare i file bot. Stavo cercando un modo per ereditare o includere l'intera composizione. –

+1

@ RetoGmür - Ho appena passato la stessa cosa. Sfortunatamente non esiste attualmente un modo per estendere un intero file di configurazione di Docker Compose. –

+0

Penso che ti interesserà https://github.com/docker/compose/pull/2051 che è disponibile nell'ultima versione RC https://github.com/docker/compose/releases/tag/1.5. 0rc2 – dnephin

8

Con docker-compose 1.6, ciò dovrebbe essere possibile.

Creare un docker-compose.yml con i tuoi servizi comuni:

service01: 
    image: image01 
    links: 
    - service02 

service02: 
    image: image02 

E un secondo file, docker-compose.prod.yml con i tuoi servizi unici:

service03: 
    image: image03 
    links: 
    - service02 

Ora è possibile avviare il servizio 01, 02 e 03 con questo comando :

docker-compose -f docker-compose.yml -f docker-compose.prod.yml 

Per ulteriori informazioni, vedere il fuori icial documentation: https://docs.docker.com/compose/extends/#multiple-compose-files

Problemi correlati