使用 Docker、Puppet 和 Jenkins 进行持续交付和生产环境部署

10

需要为一个新项目设置基础设施。之前我使用过独立的Puppet和Jenkins,但现在我考虑整合Docker构建,以便可以将已经构建好的Docker镜像从开发到测试再到生产中推送,而无需触发构建。

应用程序:

  • Java Web应用程序,具有由PostgreSQL、Neo4j、Elasticsearch支持的REST API
  • 通过REST API与Java通信的Angular编写的客户端应用程序
  • 代码存储在Git存储库中

环境:

  • 开发服务器(构建、开发+测试环境)- 32GB Linux机器
  • 测试服务器(AWS)
  • 生产环境(AWS)

设置:

所以基本上我想的是这样的:

  • 独立的Docker镜像用于Java +客户端应用程序、PostgreSQL、Elasticsearch、Neo4j,它们相互通信并通过Docker卷或使用Docker数据容器在主机上存储其数据(尚未决定采用哪种方法)
  • Jenkins构建所有代码并创建Docker镜像,这些镜像将被推送到私有内部仓库
  • 在DEV服务器上使用Puppet Docker模块运行集成测试
  • 通过使用Docker通过Puppet将其推送到生产环境中

为什么我应该使用docker?

  • 大型开发机器-可以很容易地运行多个应用程序实例,无需虚拟化(可以有不稳定的开发、稳定的开发、SIT等)
  • 部署轻松(使用Docker和Puppet Docker模块),回滚简单(只需从Docker存储库中检索上一个版本即可)
  • 快速迁移和生成新实例的能力
  • 准备好轻松扩展系统的不同部分(例如,集群化Elasticsearch)

问题

  • 这看起来合理吗?
  • 我正在考虑使用这个puppet模块https://github.com/garethr/garethr-docker。如何通过它更新我的环境?我必须以某种方式停止docker容器,执行docker rm,然后docker run吗?
  • 我们正在使用liquibase进行数据库更新管理。更新/回滚应该与docker分开处理吗?
  • 欢迎任何建议,谢谢。

    1个回答

    11
    你正在构建一个容器编排PAAS。我的建议是查看类似系统的最佳实践,这可能值得效仿。
    首先要开始的地方是12因素应用程序网站,由Heroku的联合创始人之一编写。该网站非常有用,描述了现代云规模应用程序的一些理想操作特性。下一站将是Heroku本身,以获得“现代”开发和部署环境可能会是什么样子的想法。

    我建议您看一些新兴的开源PAAS平台。目前非常流行的是大型供应商支持的系统,例如Cloud FoundryOpenshift,但也出现了一些基于docker的简单解决方案。

    其中之一,Deis,使用了相关技术Chef,因此可能会提供一些关于如何使用puppet来管理运行时docker容器的见解。(现代Deis不再使用Chef)
    • 是的,这很合理。
    • 与其管理“环境”,不如像Heroku一样为每个应用程序版本创建一个新的应用程序。这就是“构建、发布、运行”模式。在您的情况下,Jenkins由新代码触发,创建Docker映像,可以保存到存储库中并用于部署应用程序版本的实例。
    • 数据库将是“后备服务”的一个例子,您可以在应用程序创建时连接到它。升级将包括停止一个应用程序版本并启动另一个版本,两者都连接到同一个数据库。

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