如何在Travis中构建我的Docker(Node.js)容器并在生产环境中运行

4

我的当前设置:

  • 当代码更改推送到Github时,Travis触发构建。
  • Travis使用Dockerfile构建容器并推送到dockerhub。

我需要实现的目标:

  • 在生产环境内从docker hub拉取容器。
  • 运行容器并暴露所需端口。

解决方法:

  • 通过SSH进入生产环境,拉取并运行容器(使用travis.yml)。

我想在Travis构建成功后立即在生产环境中拉取和运行容器。 SSH似乎是一种不安全的做法,我需要最佳实践来实现这一点。


你们的生产环境是什么?是云环境还是物理服务器? - Yaron Idan
亚马逊 EC2 Linux 实例 - sithumc
使用托管的Docker解决方案是一个选择吗?我们正在使用弹性Beanstalk,CI流水线运行良好。这需要一些额外的工作,但它会使您的部署更加顺畅。 - Yaron Idan
我稍后会研究一下。目前需要一个软性解决方案。 - sithumc
1
那么你的另外两个选择是使用Travis在服务器上运行bash文件,这有点hacky,正如你所提到的 - 如果你尝试添加实例到你的应用程序并执行滚动更新和蓝/绿部署(ECS和beanstalk将为您提供开箱即用的功能),可能会出现问题。另一个解决方案是使用像AWS codedeploy或CM工具这样的工具,但这可能比启动beanstalk应用程序需要更多的时间。 - Yaron Idan
1个回答

1
你有几个选择:
1 - 你实际上想要在 DockerHub 构建完成后拉取镜像,而不是在 Travis 完成后。在这种情况下,你可以使用 DockerHub webhooks 调用服务器上的某种服务(可以归结为任何一种脚本),以拉取并运行镜像。
来自https://docs.docker.com/docker-hub/repos/#/webhooks

您可以使用 Hub 存储库 webhook 来通知人员、服务和其他应用程序,在新映像推送到您的存储库后发生这种情况(这也适用于自动化构建)。例如,您可以在映像可用时触发自动化测试或部署。

2 - 使用类似 Ansible 的工具避免自己 SSH 进入机器。你只需编写一个 Ansible 角色,它就会在 Travis 构建中运行。Ansible 有一个非常好的 docker 模块,所以你会很好地完成任务。

3 - 使用更适合的基础架构,比如亚马逊ECS,它基本上是一个或一组EC2实例,为您运行和管理Docker容器和镜像。如果您知道如何创建EC2实例,那么创建简单的ECS实例将不会成为问题。

希望这可以帮助到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接