如何testing和部署Docker生产映像?
我正在开发Ruby on Rails,并开始使用Docker进行一个月的部署。
以下是我正在处理的步骤。
- 开发我的笔记本电脑
- 推到gitlab
- build立一个包括testing和生产gem的图像
- 对此图像运行rspec
- (通)推送到registry,(失败)丢弃图像
有了这个工作stream程,我将拥有一个拥有所有testing,开发和生产gem的图像。
我从与许多人交谈中find的工作stream程
- 在我的膝盖上开发
- 推到gitlab
- build立testing图像(testing所需的所有gem)
- 对testing图像运行rspec
- (通过)构build另一个图像部署没有testinggem,推到dockerregistry,(失败)丢弃图像
用这种方法,我认为这是违反了Docker的目的(被testing的图像应该与将被部署的图像无关)。
如何指定和实施testing和推送生产映像的方法?
正如Alexei Ledenev的 “ Docker容器testing策略 ”中提到的 ,您的第一种方法具有明显的缺点:
- 增加图像大小 – 因为它包含testing工具,所需的软件包,testing脚本甚至testing数据
- 使用特定于testing的configuration污染图像运行时环境,甚至可能引入不需要的依赖项(集成testing需要)
- 我们还需要决定如何处理testing结果和日志。 如何和在哪里出口他们
一个不同的方法(接近你提到的第二个方法)是制作一个“testing感知容器”:
我们认为Docker应该将Docker
docker-test
作为容器pipe理生命周期的一部分。如前所述,Docker有一个非常有用的
ONBUILD
指令 。 这个指令允许我们在成功的构build中触发另一个构build指令。
基本思想是在运行ONBUILD
docker-test
命令时使用ONBUILD
指令。由
docker-test
命令执行的stream程:
docker-test
将search应用程序Dockerfile中的ONBUILD
指令,将…
- 从原始的
Dockerfile
生成一个临时的Dockerfile
- 执行
docker build -f Dockerfile.test [OPTIONS] PATH
build命令支持附加选项的docker build -f Dockerfile.test [OPTIONS] PATH
: – 将自动附加到tag
选项的testing- 如果构build成功,执行
docker run -v ./tests/results:/var/tests/results [OPTIONS] IMAGE:TAG-test [COMMAND] [ARG...]
- 删除
Dockerfile.test
文件
(本文继续描述集成testing容器)