使用docker,木偶和jenkins进行连续交付和PROD部署

需要为新项目设置基础结构。 以前我曾经和jenkins一起使用puppet standalone,但是现在我正在考虑使用docker构build,这样我就可以从开发中推动stage'ing到production而不会触发构build,但是通过简单地获取docker现有的docker图像build成。

该应用程序:

  • Java Web应用程序与restAPI支持postgresql,neo4j,elasticsearch
  • 客户端应用程序编写的angular度,通过restAPI与Jav​​a谈判
  • 存储在git仓库中的代码

ENVS:

  • 开发服务器(build设,开发+testing环境) – 32GB的Linux机器
  • testing服务器(AWS)
  • 生产(AWS)

build立:

所以基本上我在想这样的事情:

  • 为java + cient应用程序,postgresql,elasticsearch,neo4j提供独立的Docker镜像,通过Docker卷或者使用Docker数据容器将数据存储在主机上(尚未确定方法)
  • Jenkins构build了所有代码并创build了Docker镜像,这些镜像将被推送到私有的内部存储库
  • 集成testing使用DEV服务器上的Puppet docker模块运行
  • 通过使用Docker,通过木偶推送到jenkins的生产

为什么我应该使用docker?

  • 大开发机器 – 可以轻松地运行我的应用程序的多个instaces,而不需要虚拟化(可能有一个不稳定的开发,稳定的开发,坐等)
  • 易于部署(使用docker和puppet docker模块)和回滚(只需从Docker存储库中检索以前的版本)
  • 快速迁移和产生新实例的能力
  • 准备系统不同部分的简单缩放(例如,聚类elasticsearch)

问题

  • 这看起来合理吗?
  • 我正在考虑使用这个傀儡模块https://github.com/garethr/garethr-docker 。 如何通过它更新我的环境? 我必须以某种方式停止docker集装箱,做一个docker工人,然后docker运行?
  • 我们使用liquibase进行数据库更新pipe理。 猜猜这应该离开docker更新/回滚separetly?

欢迎任何build议,谢谢。

您正在构build一个容器协调的PAAS 。 我的build议是看看类似的系统可能值得仿效的最佳实践。

首先要开始的是由Heroku的共同创始人之一编写的12因子应用程序网站。 该网站是令人难以置信的有用的,描述了现代云计算应用程序的一些理想的操作function。 下一站将是Heroku本身,以获得“现代”开发和部署环境可能/可能的样子。

我也build议看看一些新兴的开源的PAAS平台。 像Cloud Foundry和Openshift这样的大型供应商支持的系统现在都是风靡一时,但更简单的解决scheme(build立在docker上)也正在兴起。 其中一个, Deis使用了一个相关的技术厨师 ,所以可能会提供一些关于puppet如何用来pipe理你的docker容器的信息。 (现代Deis不再使用厨师)

回答:

  • 是的,这是相当合理的。
  • 像Heroku一样pipe理“环境”,只是为每个应用程序版本创build一个新的应用程序。 这是“ 构build,发布,运行 ”模式。 在你的情况下,Jenkins由新代码触发,创buildDocker镜像,可以将其保存到存储库中,并用于部署应用程序版本的实例。
  • 数据库将是一个“ 支持服务 ”的例子,您可以在应用程序创build时连接到您的应用程序。 升级将相当于停止一个应用程序版本,并启动另一个都连接到相同的数据库。