web-dev-qa-db-fra.com

Héritage ou imbrication avec docker compose

La meilleure façon de démarrer notre application est d'utiliser un docker que nous fournissons. Le docker-compose démarre tous les services avec la bonne configuration.

Maintenant, nous aimerions fournir un docker-compose où l'application s'exécute avec un backend différent. Dans cette composition, 8 services sur 10 sont identiques et 2 sont différents.

Comment y parvenir sans duplication de code? Je vois qu'un service peut étendre un service à partir d'un autre fichier docker-compose, mais cela nécessiterait toujours de répertorier tous les 10 services dans les deux fichiers.

26
Reto Gmür

Avec docker-compose 1.6, cela devrait être possible.

Créer un docker-compose.yml avec vos services communs:

service01:
  image: image01
  links:
    - service02

service02:
  image: image02

Et un deuxième fichier, docker-compose.prod.yml avec vos services uniques:

service03:
  image: image03
  links:
    - service02

Vous pouvez maintenant démarrer le service 01, 02 et 03 avec cette commande:

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

Pour plus d'informations, consultez la documentation officielle: https://docs.docker.com/compose/extends/#multiple-compose-files

18
José Luis

La façon la plus simple d'y parvenir est de créer un deuxième fichier de composition. Dans le deuxième fichier, vous pouvez utiliser la fonction extend de Docker Compose qui vous permet "d'hériter" des services d'un autre fichier: https://docs.docker.com/compose/extends/

En supposant que votre fichier d'origine est docker-compose.yaml, vous pouvez créer 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

...etc.

14
Justin Niessner