2015-10-29 9 views
12

Najlepszym sposobem na uruchomienie aplikacji jest skorzystanie z funkcji dokowania. Komponent docker-compose uruchamia wszystkie usługi o odpowiedniej konfiguracji.Dziedziczenie lub zagnieżdżanie przy użyciu dokowania: komponowanie

Teraz chcielibyśmy dostarczyć doker-compose, w którym aplikacja działa z innym backendem. W tym składzie usługi 8 na 10 są takie same, a 2 są różne.

Jak to osiągnąć bez duplikowania kodu? Widzę, że usługa może rozszerzyć usługę z innego pliku do tworzenia dokowanego, jednak wymagałoby to w dalszym ciągu listy wszystkich 10 usług w obu plikach.

Odpowiedz

11

Najprostszym sposobem osiągnięcia tego jest utworzenie drugiego pliku utworu. W drugim pliku, można użyć extend cechę Docker Compose, który pozwala na „dziedziczą” usługi z innego pliku: https://docs.docker.com/compose/extends/

Zakładając, że oryginalny plik jest docker-compose.yaml, można utworzyć 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 

... i tak dalej.

+0

Dzięki. Jednak wciąż wymaga to wylistowania wszystkich 10 usług w pliku 'swap-backen-compose.yaml' i jeśli dodaję nową usługę, muszę edytować pliki bota. Szukałem sposobu na dziedziczenie lub uwzględnienie całego komponentu. –

+1

@ RetoGmür - Właśnie przeszedłem to samo. Niestety nie ma obecnie sposobu na rozszerzenie całego pliku konfiguracyjnego Docker Compose. –

+0

Myślę, że będziesz zainteresowany https://github.com/docker/compose/pull/2051, który jest dostępny w najnowszym wydaniu RC https://github.com/docker/compose/releases/tag/1.5. 0rc2 – dnephin

8

Przy dokowaniu-komponowaniu 1.6 powinno to być możliwe.

Tworzenie docker-compose.yml ze swoich wspólnych usług:

service01: 
    image: image01 
    links: 
    - service02 

service02: 
    image: image02 

i drugi akt, docker-compose.prod.yml z unikalnych usług:

service03: 
    image: image03 
    links: 
    - service02 

Teraz można uruchomić usługę 01, 02 i 03 z tym poleceniem :

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

Aby uzyskać więcej informacji, zobacz temat icial dokumentacja: https://docs.docker.com/compose/extends/#multiple-compose-files

Powiązane problemy