2016-09-18 51 views
2

我正在开发Ruby on Rails,并开始使用Docker进行一个月的部署。如何测试和部署Docker生产映像?

以下是我正在处理的步骤。

  1. 开发我的笔记本电脑
  2. 推gitlab
  3. 建立一个单一的形象,包括测试和生产宝石
  4. 针对这一形象
  5. 运行rspec的
  6. (通过)推到注册表,(失败)丢弃图像

有了这个工作流程,我会我拥有一张具有所有测试,开发和生产宝石的图像。

,我从我的膝盖顶与许多人交谈

  1. 开发
  2. 推找到gitlab
  3. 构建测试图像(所有必要测试宝石)
  4. 运行工作流rspec针对测试图像
  5. (通过)构建另一个图像部署没有测试宝石和推到码头注册表,(失败)丢弃图像

用这种方法,我认为这违反了Docker的目的(被测试的图像应该与部署的图像无关)。

如何指定和实现测试和推送生产映像的方法?

回答

3

正如Alexei Ledenev在“Testing Strategies for Docker Containers”中提到,你的第一个方法有显著的缺点:

  • 增加图像尺寸 - 因为它包含的测试工具,需要的软件包,测试脚本,甚至测试数据
  • 污染图像运行时环境与测试特定配置,甚至可能引入不需要的依赖性(集成测试要求)
  • 我们还需要决定如何处理测试结果和日志;在何处以及如何导出它们

一种不同的方法(靠近你提到的第二个)正在“测试感知集装箱”:

我们相信泊坞窗应的docker-test部分容器管理生命周期。

如前所述,Docker有一个非常有用的ONBUILD instruction。这条指令允许我们在成功构建时触发另一个构建指令。
基本思想是在运行docker-test命令时使用ONBUILD指令。

通过docker-test命令执行的流程:

docker-test将搜索应用Dockerfile ONBUILD指令和会...

  • 产生从原来Dockerfile
  • 临时Dockerfile.test与支持的附加选项执行docker build -f Dockerfile.test [OPTIONS] PATH docker build命令:-test将自动附加到tag选项
  • 如果建造成功,执行docker run -v ./tests/results:/var/tests/results [OPTIONS] IMAGE:TAG-test [COMMAND] [ARG...]
  • 删除Dockerfile.test文件

(该文章接着描述一个集成测试容器)