2015-11-15 2 views
6

Je prévois d'utiliser docker pour construire mon environnement de développement et de production. Je construis une application basée sur Django.Docker compose en production?

Sur le développement, j'utilise docker-compose pour gérer tous les conteneurs locaux. C'est une solution agréable et pratique. Je cours Django, 3 files d'attente de céleri, rabbitmq, 2 DB de postgresql. Mais mon environnement de production est assez différent. J'ai besoin de lancer gunicorn et nginx. De plus, les bases de données seront exécutées à l'aide d'AWS RDS. Bien sûr, l'application Django nécessitera plus de choses, comme des fichiers de paramètres différents ou plus d'env.

Je me demande comment le diviser. Est-ce que je devrais docker-compose là aussi? Cela nécessitera des fichiers séparés pour dev et prod, peut-être plus à l'avenir pour la mise en scène etc ... Si oui, comment le déployer? En utilisant Jenkins, tirez, redémarrez tout en utilisant composer?

Ou peut-être que je devrais utiliser ansible pour exécuter les commandes docker directement? Mais alors je n'ai aucune confiance que mon dev est le même que le live et il est plus difficile de prédire son comportement. J'aime l'idée d'exécuter des fichiers de composition sur tous les environnements, mais je ne suis pas sûr si la conservation de plusieurs fichiers pour différents environnements est une bonne idée. Dev nécessite moins de variables d'environnement et moins de configuration. Je peux utiliser le fichier env pour les mettre tous en production. Mais devrais-je garder mes paramètres en direct dans le repo? Auparavant, je mettais toutes les variables d'env pendant le provisionnement et c'était un processus séparé. Maintenant, il semble que l'approvisionnement et le déploiement sont les mêmes? Peut-être que c'est le chemin avec Docker?

+2

Idéalement, la seule différence entre Dev et Prod devrait être l'échelle et l'accès aux données. Docker swarm peut être exécuté sur EC2 ce qui vous permet d'avoir le même flux de travail en production. Si vous utilisez RDS, l'URL de la base de données et les informations d'identification peuvent être injectées dans les conteneurs à l'aide des variables d'environnement. Cela peut être simulé dans Dev en utilisant une ou plusieurs bases de données fonctionnant de manière autonome dans des conteneurs Docker. –

+0

Dans le troisième projet d'affilée, j'utilise des fichiers séparés pour chaque environnement. – Opal

Répondre