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.
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
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.