【问题标题】:How to build my docker (nodejs) container in travis and run in production如何在 travis 中构建我的 docker (nodejs) 容器并在生产中运行
【发布时间】:2016-10-27 09:26:42
【问题描述】:

我目前的设置:

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

我需要达到的目标:

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

方法:

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

我想在 Travis 构建成功后立即在生产环境中拉取并运行容器。 SSH 似乎很黑客,我需要最佳实践来实现这一点。

【问题讨论】:

  • 您的生产环境是什么?它是某种云环境还是物理服务器?
  • Amazon EC2 linux 实例
  • 是否可以选择使用托管 docker 解决方案?我们正在使用弹性 beantalk,CI 管道运行良好。这是一些额外的工作,但它会让您的部署更加顺畅。
  • 我稍后会调查。暂时需要一个软解。
  • 那么您的另外两个选项是使用 travis 在服务器上运行 bash 文件,正如您所提到的,这有点 hacky - 如果您尝试将实例添加到您的应用程序并执行,可能会出现问题滚动更新和蓝/绿部署(ECS 和 beanstalk 将为您提供开箱即用的功能)。另一种解决方案是为此使用工具 - 例如 AWS codedeploy 或 CM 工具,但这可能比启动 beanstalk 应用程序需要更多时间。

标签: node.js docker travis-ci


【解决方案1】:

你有几个选择:

1 - 你实际上想在 DockerHub 构建完成之后拉取镜像,而不是在 travis 完成之后,在这种情况下,你可以使用 DockerHub webhooks 调用某种服务(它可以归结为任何类型的脚本)在您的服务器上,这将拉取图像并运行它。

来自https://docs.docker.com/docker-hub/repos/#/webhooks

您可以使用 Hub 存储库 Webhook 来通知人员、服务和 将新映像推送到您的存储库后的其他应用程序 (这也发生在自动化构建中)。例如,您可以触发 映像完成后立即进行自动化测试或部署 可用。

2 - 使用 Ansible 之类的东西来避免自己通过 SSH 进入机器。您编写一次 Ansible 角色,它将在您的 Travis 构建中运行。 Ansible 有一个非常好的 docker 模块,所以你会很好。

3 - 使用更适合的基础架构,例如 Amzon ECS,它基本上是一个或一组 EC2 实例,为您运行和管理 Docker 容器和映像。如果您知道如何旋转 EC2 实例,那么制作一个简单的 ECS 实例根本不是问题。

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2019-08-27
    • 1970-01-01
    相关资源
    最近更新 更多