gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:38:41 28 4
gpt4 key购买 nike

我已经设置了 gitlab runner 来使用 docker/compose:latest运行一组服务的图像。
通过设置 pull_policy="if-not-present"config.toml docker/compose:latest图像被缓存并且每次都不会被拉取。
如何将测试阶段使用的 docker 服务设置为使用缓存图像(即使用 docker-compose up -d 启动的图像)?我对 dind 有点困惑服务。.gitlab-ci.yml

variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
DOCKER_DRIVER: overlay2
CI_REGISTRY: my-docker-registry.local:5000

image:
name: docker/compose:latest

services:
- name: docker:dind
command: ["--insecure-registry=my-docker-registry.local:5000"]

test:
stage: test
script:
- 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]

最佳答案

pull_policy仅适用于 runner 本身拉取的图像。 IE。您在 image: 中设置的图像键(或 services[]:name )。
如果您使用 docker使用 docker 执行器时,在作业中(例如,您使用 docker-compose up -d 的位置),则无法利用缓存层,必须先从注册表中提取图像或从头开始构建。
原因是 docker-in-docker GitLab 作业使用 docker:dind服务作为它的 docker 守护进程。该服务每次都会提供一个新的状态,因此不会利用缓存的图像,即使运行器本身已经缓存了图像。
但是,您可以使用 --cache-from 从注册表中提取镜像并将其用作构建的缓存。 docker build 的参数.

script:
- docker pull $CI_REGISTRY_IMAGE:latest || true
- docker build --cache-from $CI_REGISTRY_IMAGE:latest --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA --tag $CI_REGISTRY_IMAGE:latest .
当然,您仍然必须每次都拉取镜像,但这可能比构建更快,特别是如果您的镜像安装了许多依赖项或编译大型模块或类似的东西。
docker-in-docker文档中的部分以获取更多信息。

关于docker-compose - gitlab runner - 如何缓存图像而不是每次都构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64664881/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com