我正在尝试建立一个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构建容器的情况下验证那些配置?甚至有可能吗?
答案 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_
开头。因此,您将获得以下图像名称:
诀窍是使用唯一的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