如何验证从docker-compose构建的docker映像的有效性?

时间:2019-03-05 20:14:26

标签: docker testing docker-compose continuous-integration

我正在尝试建立一个CI系统,在该系统中,我将验证用于构建映像的Dockerfile和docker-compose.yaml文件。

我找到了Google containter-structure-tests 可用于验证构建的Docker映像的结构。如果Docker映像是从Dockerfile构建的,则此方法有效。

有没有一种方法可以验证Docker镜像添加到镜像中的所有配置的docker镜像?

编辑: 也许我并没有把所有细节都放在问题中。

让我们说我有以下结构的docker-compose文件:

version: "3"
services:
  image-a:
    build:
      context: .
      dockerfile: Dockerfile-a
  image-b:
    build:
      context: .
      dockerfile: Dockerfile-b
      ports:
          - '8983:8983'
      volumes:
         - '${DEV_ENV_ROOT}/solr/cores:/var/data/solr'
         - '${DEV_ENV_SOLR_ROOT}/nginx:/var/lib/nginx'

现在,映像将由Dockerfile-a和Dockerfile-b构建,将在映像foo-b上进行配置。如何在不从映像foo-b构建容器的情况下验证那些配置?甚至有可能吗?

1 个答案:

答案 0 :(得分:1)

假设您具有以下docker-compose.yml文件:

version: "3"
services:
  image-a:
    build:
      context: .
      dockerfile: Dockerfile-a
  image-b:
    build:
      context: .
      dockerfile: Dockerfile-b

运行命令docker-compose --project-name foo build构建图像。这将使所有图像的名称以前缀foo_开头。因此,您将获得以下图像名称:

  • foo_image-a
  • foo_image-b

诀窍是使用唯一的ID(例如您的CI作业ID)代替foo,以便您可以识别刚刚构建的图像。

现在您知道图像的名称了,可以使用:

  • container-structure-test test --image foo_image-a --config config.yaml
  • container-structure-test test --image foo_image-b --config config.yaml

如果要执行某种不知道docker组合服务名称的通用作业,则可以使用以下命令获取以该foo_前缀开头的图像列表:

docker image list --filter "reference=foo_*"
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
foo_image-a         latest              0c5e1cf8c1dc        16 minutes ago      4.15MB
foo_image-b         latest              d4e384157afb        16 minutes ago      4.15MB

,如果您希望脚本遍历此结果,请添加--quiet选项以仅获取图像的ID:

docker image list --filter "reference=foo_*" --quiet
0c5e1cf8c1dc
d4e384157afb