gpt4 book ai didi

docker - 如何让 gitlab-ci-runner DinD 图像缓存中间图像?

转载 作者:IT老高 更新时间:2023-10-28 12:35:59 26 4
gpt4 key购买 nike

我有一个 Dockerfile,它从安装 texlive-full 包开始,它很大并且需要很长时间。如果我在本地docker build,安装后创建的中间镜像会被缓存,后续构建速度很快。

但是,如果我推送到我自己的 GitLab 安装并且 GitLab-CI 构建运行程序启动,这似乎总是从头开始,重新下载 FROM 图像,并再次进行 apt-get 安装.这对我来说似乎是一个巨大的浪费,所以我试图弄清楚如何让 GitLab DinD 图像缓存构建之间的中间图像,到目前为止还没有运气。

我已经尝试将 --cache-dir--docker-cache-dir 用于 gitlab-runner register 命令,无济于事。

这甚至是 gitlab-runner DinD 图像应该能够做的事情吗?

我的.gitlab-ci.yml:

build_job:
script:
- docker build --tag=example/foo .

我的Dockerfile:

FROM php:5.6-fpm
MAINTAINER Roel Harbers <roel.harbers@example.com>
RUN apt-get update && apt-get install -qq -y --fix-missing --no-install-recommends texlive-full
RUN echo Do other stuff that has to be done every build.

我使用 GitLab CE 8.4.0 和 gitlab/gitlab-runner:latest 作为运行器,开始为

docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/local/gitlab-ci-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner:latest \
; \

运行者注册使用:

docker exec -it gitlab-runner gitlab-runner register \
--name foo.example.com \
--url https://gitlab.example.com/ci \
--cache-dir /cache/build/ \
--executor docker \
--docker-image gitlab/dind:latest \
--docker-privileged \
--docker-disable-cache false \
--docker-cache-dir /cache/docker/ \
; \

这将创建以下 config.toml:

concurrent = 1
[[runners]]
name = "foo.example.com"
url = "https://gitlab.example.com/ci"
token = "foobarsldkflkdsjfkldsj"
tls-ca-file = ""
executor = "docker"
cache_dir = "/cache/build/"
[runners.docker]
image = "gitlab/dind:latest"
privileged = true
disable_cache = false
volumes = ["/cache"]
cache_dir = "/cache/docker/"

(我尝试了 cache_dirdocker_cache_dirdisable_cache 的不同值,结果都一样:没有任何缓存)

最佳答案

我想你的问题没有简单的答案。在添加一些细节之前,我强烈建议阅读this blog article来自 DinD 的维护者,最初命名为“Do not use Docker in Docker for CI”。

您可以尝试将 /var/lib/docker 声明为 GitLab 运行器的卷。但请注意,根据您的文件系统驱动程序,您可能会在主机上的 AUFS 文件系统上的容器中使用 AUFS,这很可能会导致问题。

我建议您创建一个单独的 Docker-VM,仅用于运行器,并从 VM 绑定(bind)安装 docker.sock进入你的运行者容器。我们在 GitLab 中使用此设置并取得了巨大成功(大约 12 个月内构建了 >27.000 个版本)。

您可以查看我们的runner with docker-compose support这实际上是基于 GitLab 的 runner 的 shell-executor。

关于docker - 如何让 gitlab-ci-runner DinD 图像缓存中间图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35556649/

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