web-dev-qa-db-fra.com

Comment envoyer des conteneurs Docker gérés par Docker-compose à Heroku?

J'ai actuellement une application web testée et fonctionnant localement qui se compose de 4 conteneurs docker: Java MVC, NodeJS, Flask et MongoDB. J'ai 4 Dockerfiles, un pour chacun, et je gère les builds avec docker-compose.yml.

Cependant, maintenant je veux pousser mon code vers Heroku et j'ai lu la documentation sur https://devcenter.heroku.com/articles/container-registry-and-runtime . Cependant, il semble très ambigu quant à la façon d'utiliser le docker-compose sur la chaîne de production. Voici ce qu'il dit sur les documents:

"Si vous avez créé une application multi-conteneurs, vous pouvez utiliser Docker Compose pour définir votre environnement de développement local . Apprenez à utiliser Docker Compose pour le développement local . "

Quelqu'un peut-il me guider vers un code réel de la façon dont je peux pousser mon projet vers le conteneur Heroku à l'aide de la CLI Heroku?

20
AspiringMat

La documentation Heroku plus précise pour ce que vous cherchez à faire est ici: https://devcenter.heroku.com/articles/container-registry-and-runtime

Ce qui précède vous guidera à travers la configuration du plug-in de conteneur Heroku et la connexion au registre. Vous pouvez même migrer une image vers un Dockerfile avec la ligne suivante dans votre Dockerfile:

FROM "<insert Dockerfile tag here>"

Pour configurer facilement cela, vous nommerez vos Dockerfiles avec différents suffixes, tels que Dockerfile.mongo, Dockerfile.node, Dockerfile.flask et Dockerfile.javamvc. Le suffixe indique à heroku le nom du dyno utilisé pour votre application Web. Lorsque vous devez pousser tous vos conteneurs, vous pouvez le faire avec la commande suivante, qui créera récursivement tous les dockerfiles tant qu'ils ont tous des suffixes uniques:

heroku container:Push --recursive

Comme Heroku ne lit pas les fichiers de composition de docker, toute configuration de variable d'environnement/exposition de port/etc. devra être migrée vers le Dockerfile. De plus, comme je ne trouve pas comment effectuer un stockage/volume persistant avec des conteneurs sur Heroku, je recommanderais d'utiliser un module complémentaire Heroku pour votre base de données mongo.

Sur Heroku, vous verrez votre application s'exécuter comme un seul dyno par Dockerfile, avec le nom de chaque dyno comme suffixe de chaque Dockerfile.

MISE À JOUR:

  1. Travis soulève un bon point. Assurez-vous d'avoir une instruction CMD dans votre Dockerfile, sinon heroku générera une erreur.
  2. Hiereroku a également récemment ajouté une étape au processus, vous devrez exécuter heroku container:release <your dyno name> pour chaque dynamo que vous souhaitez mettre à jour.
6
eliotn

Juste une mise à jour sur cette question car elle semble obtenir beaucoup de traction ces derniers temps.

Il existe maintenant une solution " Heroku.yml " officiellement prise en charge par Heroku. Vous pouvez maintenant écrire un fichier .yml (avec un format similaire à docker-compose) et Heroku travaillera vos images. Suivez simplement le lien ci-dessus pour plus de détails.

Bonne Heroku-ing.

3
AspiringMat