如何推送由Docker管理的Docker容器组成Heroku?

时间:2017-10-24 06:58:41

标签: docker heroku docker-compose dockerfile

我目前有一个本地测试和工作的Web应用程序,由4个docker容器组成:Java MVC,NodeJS,Flask和MongoDB。我有4个Dockerfiles,每个都有一个,我使用docker-compose.yml管理构建。

但是,现在我想将我的代码推送到Heroku,并在https://devcenter.heroku.com/articles/container-registry-and-runtime阅读文档。但是,如何在生产线上使用docker-compose似乎非常暧昧。这就是它在文档中所说的内容:

"如果您已创建多容器应用程序,则可以使用Docker Compose来定义本地开发环境。了解如何使用Docker Compose进行本地开发。"

任何人都可以指导我使用Heroku的CLI将我的项目推送到Heroku容器的实际代码吗?

2 个答案:

答案 0 :(得分:6)

您想要做的更准确的heroku文档在这里: https://devcenter.heroku.com/articles/container-registry-and-runtime

以上内容将指导您设置heroku容器插件并登录注册表。您甚至可以使用dockerfile中的以下行将映像迁移到Dockerfile:

FROM "<insert Dockerfile tag here>"

要轻松设置它,您将使用不同的后缀命名Dockerfiles,例如Dockerfile.mongo,Dockerfile.node,Dockerfile.flask和Dockerfile.javamvc。后缀告诉heroku用于您的Web应用程序的dyno名称。当您需要推送所有容器时,可以使用以下命令执行此操作,只要所有dockerfiles都具有唯一的后缀,它就会递归构建所有dockerfiles:

heroku container:push --recursive

由于Heroku不读取docker-compose文件,因此需要将任何环境变量setup / port exposure / etc迁移到Dockerfile。另外,由于我无法在Heroku上找到如何使用容器进行持久存储/卷安装,我建议您为mongo数据库使用Heroku插件。

在Heroku上,您将看到您的应用程序作为每个Dockerfile的一个dyno运行,每个dyno的名称作为每个Dockerfile的后缀。

更新:

  1. 特拉维斯提出了一个很好的观点。确保在Dockerfile中有一个CMD语句,否则heroku将抛出错误。
  2. Yesterdayeroku最近还为此流程添加了一个步骤,您需要为要更新的每个dyno运行heroku container:release <your dyno name>

答案 1 :(得分:2)

仅此问题的更新,因为最近似乎吸引了很多关注。

Heroku现在提供了一种官方支持的“ Heroku.yml”解决方案。 现在,您可以编写一个.yml文件(格式类似于docker-compose),Heroku会生成您的图像。请点击上面的链接以获取详细信息。

快乐的Heroku-ing。