web-dev-qa-db-fra.com

Utilisez docker-compose avec plusieurs référentiels

Je suis actuellement aux prises avec le déploiement de mes services et je voulais vous demander quelle est la bonne façon de gérer plusieurs référentiels. Les référentiels sont indépendants, mais pour fonctionner en production, tout doit être lancé.

Ma configuration:

  • Gend Repository Backend:
    • Rails de projet backend
    • docker-compose: backend (expose 3000), db et redis
  • Frontend du référentiel Git
    • Serveur Express.js
    • docker-compose: (exposer 4200)

Les deux peuvent être exécutés indépendamment et le test peut être exécuté par CI

  • Git Repository Nginx pour la production
    • Besoin de se connecter aux deux autres services (même réseau docker)
    • transmet les demandes au bon service

J'ai déjà essayé d'inclure les deux services en tant que sous-modules dans le référentiel Nginx et d'utiliser le docker-compose du dépôt nginx, mais je n'en suis pas vraiment satisfait.

24
Mathias Aichinger

Vous pouvez faire construire vos images CI et Push pour chaque service que vous souhaitez exécuter, et faire en sorte que l'environnement de production exécute les 3 conteneurs.

Ensuite, votre production docker-compose.yml ressemblerait à ceci:

lb:
  image: nginx
  depends_on:
    - Rails
    - express
  ports: 80:80

  Rails:
    image: yourorg/railsapp

  express:
    image: yourorg/expressapp

Sachez que docker-compose n'est pas recommandé pour les environnements de production; vous devriez envisager d'utiliser Bundles d'applications distribuées (il s'agit toujours d'une fonctionnalité expérimentale, qui sera publiée au cœur de la version 1.13)

Alternativement, vous pouvez orchestrer vos conteneurs avec un outil comme ansible ou un script bash; assurez-vous simplement de créer un réseau docker et d'y attacher les trois conteneurs afin qu'ils puissent se retrouver.

Edit: depuis Docker v17 et la dépréciation de DAB s en faveur de Compose file v , il semble que pour un seul hôte environnements, docker-compose est un moyen valide pour exécuter des applications multiservices. Pour les scénarios multi-hôtes/HA/clusterisés, vous voudrez peut-être examiner Docker Swarm pour une solution autogérée, ou Docker Cloud pour une approche plus PaaS. Dans tous les cas, je vous conseille de l'essayer dans Play-with-Docker , le bac à sable en ligne officiel où vous pouvez faire tourner plusieurs hôtes et jouer avec un cluster d'essaim sans avoir besoin de tourner vos propres boîtes.

18
gvilarino