Docker compose gitlab runner-如何缓存图像而不是每次构建?

Docker compose gitlab runner-如何缓存图像而不是每次构建?,docker-compose,gitlab,gitlab-ci-runner,Docker Compose,Gitlab,Gitlab Ci Runner,我已经设置了gitlab runner,以使用docker/compose:latest映像来运行一组服务 通过在config.toml中设置pull\u policy=“if not present”,将缓存docker/compose:latest图像,并且每次都不会提取该图像 如何将测试阶段中使用的docker服务设置为使用缓存图像(即使用docker compose-d启动的图像)?我对dind服务有点困惑 .gitlab ci.yml 变量: DOCKER_主机:tcp://docke

我已经设置了gitlab runner,以使用
docker/compose:latest
映像来运行一组服务

通过在
config.toml
中设置
pull\u policy=“if not present”
,将缓存
docker/compose:latest
图像,并且每次都不会提取该图像

如何将测试阶段中使用的docker服务设置为使用缓存图像(即使用
docker compose-d
启动的图像)?我对
dind
服务有点困惑

.gitlab ci.yml

变量:
DOCKER_主机:tcp://docker:2375
DOCKER_TLS_CERTDIR:“
DOCKER_驱动程序:覆盖2
CI_注册表:我的docker注册表。本地:5000
图片:
姓名:docker/撰写:最新
服务:
-姓名:docker:dind
命令:[“--unsecure registry=my docker registry.local:5000”]
测试:
阶段:测试
脚本:
-docker compose up-d
/etc/gitlab runner/config.toml
如下所示:

                                                   concurrent = 1
check_interval = 0

[[runners]]
  name = "user1"
  url = "http://gitlab.example.local/"
  token = "<MYTOKEN>"
  executor = "docker"
  [runners.docker]
    extra_hosts = ["my-docker-registry.local:192.168.1.100"]
    tls_verify = false
    tls_verify = false
    image = "docker:latest"
    privileged = true
    disable_cache = false
    pull_policy="if-not-present"
    volumes = ["/certs/client", "/cache"]    
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    shm_size = 0
  [runners.cache]

concurrent=1
检查间隔=0
[[跑步者]]
name=“user1”
url=”http://gitlab.example.local/"
token=“”
执行者=“码头工人”
[runners.docker]
extra_hosts=[“我的docker注册表。本地:192.168.1.100”]
tls_验证=错误
tls_验证=错误
image=“docker:最新版本”
特权=真
禁用缓存=false
pull_policy=“如果不存在”
卷=[“/certs/client”,“/cache”]
禁用\u入口点\u覆盖=false
oom\u kill\u disable=错误
shm_尺寸=0
[runners.cache]

pull_策略仅适用于跑步者自己拉取的图像。即在
image:
key(或
services[]:name
)中设置的图像

如果在使用docker executor时在作业中使用
docker
(例如,在使用
docker compose up-d
),则无法利用缓存层,必须首先从注册表中提取图像或从头开始构建

原因是docker GitLab作业中的docker使用
docker:dind
服务作为其docker守护进程。此服务每次都会出现一个新状态,因此不会利用缓存的图像,即使运行程序本身缓存了图像

但是,您可以使用
--cache from
参数到
docker build
从注册表中提取图像并将其用作构建的缓存

脚本:
-docker pull$CI|u注册表|图像:最新| |真
-docker build--cache from$CI\u REGISTRY\u IMAGE:latest--tag$CI\u REGISTRY\u IMAGE:$CI\u COMMIT\u SHA--tag$CI\u REGISTRY\u IMAGE:latest。
当然,您仍然需要每次提取映像,但这可能比构建要快,尤其是当您的映像安装了许多依赖项或编译了大型模块或类似的东西时

有关更多信息,请参阅文档中的部分