如何测试和部署Docker生产映像?

时间:2016-09-18 08:29:38

标签: ruby-on-rails docker

我正在开发Ruby on Rails并开始使用Docker进行一个月的部署。

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

  
      
  1. 开发我的笔记本电脑
  2.   
  3. 推送到gitlab
  4.   
  5. 构建包含测试和生产宝石的单个图像
  6.   
  7. 针对此图片运行rspec
  8.   
  9. (传递)推送到注册表,(失败)丢弃图像
  10.   

通过这个工作流程,我将拥有一个包含所有测试,开发和生产宝石的图像。

我通过与很多人交谈找到的工作流程

  
      
  1. dev on my lap top
  2.   
  3. 推送到gitlab
  4.   
  5. 构建测试图像(测试所需的所有宝石)
  6.   
  7. 针对测试图片运行rspec
  8.   
  9. (传递)构建另一个没有测试宝石的部署映像并推送到docker注册表,(失败)丢弃图像
  10.   

使用这种方法,我认为它违反了Docker的目的(正在测试的图像应该与将要部署的图像无差异。)

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

1 个答案:

答案 0 :(得分:3)

正如Testing Strategies for Docker Containers中“Alexei Ledenev”所述,您的第一种方法存在明显缺陷:

  
      
  • 增加图像大小 - 因为它包含测试工具,所需的包,测试脚本,甚至可能包含测试数据
  •   
  • 使用特定于测试的配置污染映像运行时环境,甚至可能引入不需要的依赖项(集成测试需要)
  •   
  • 我们还需要决定如何处理测试结果和日志;如何以及在何处出口
  •   

另一种方法(更接近您提到的第二种方法)是制作“测试感知容器”:

  

我们认为Docker应该使docker-test成为容器管理生命周期的一部分。

     

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

     

docker-test命令执行的流程:

     

docker-test将在应用程序Dockerfile中搜索ONBUILD指令,并将...

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

(文章继续描述集成测试容器)

相关问题