当前位置: 首页 > 面试题库 >

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

席成仁
2023-03-14
问题内容

我有一个Dockerfile,该文件从安装texlive-full软件包开始,这是巨大的并且需要很长时间。如果docker build在本地,则将缓存安装后创建的中间映像,并且后续构建速度很快。

但是,如果我推送到自己的GitLab安装程序,并且启动了GitLab-CI构建运行程序,则这似乎总是从头开始,重新下载FROM映像,然后再次执行apt-
get安装。对我来说,这似乎是一个巨大的浪费,因此,我试图弄清楚如何获取GitLab DinD图像来缓存两次构建之间的中间图像,到目前为止还算不上运气。

我已经使用了尝试--cache-dir,并--docker-cache-dirgitlab-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_dir并且disable_cache,都具有相同的结果:没有任何缓存)


问题答案:

我想您的问题没有简单的答案。在添加一些细节之前,我强烈建议您阅读DinD维护者的这篇博客文章,该文章最初被命名为“请勿在Docker for CI中使用Docker”。

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

我建议您创建一个 单独的 Docker-
VM,仅用于运行器,然后将docker.sockVM的绑定安装到运行器容器中。我们在GitLab上成功使用了该设置(在大约12个月内构建了>
27.000)。

您可以看看我们的跑步者,它的docker-compose支持实际上基于GitLab跑步者的shell执行器。



 类似资料:
  • 问题内容: 我和我的朋友们在一个网站上工作,我们希望在其中缓存某些图像,以便将来更快地显示它们。我有两个主要问题: 您如何缓存图像? 图像被缓存后如何使用?(只是为了验证图像是否在页面A上缓存,可以从缓存中调用它以在页面B上使用它,对吗?) 此外,有可能设置 时, 图像的缓存版本将到期? 如果包括示例和/或进一步描述页面的链接,将不胜感激。 使用原始Javascript或jQuery版本都可以。

  • WordPress的示例短代码: 现在在上面的短代码中。代码中使用了一个图像。我想要获得图像,并在服务器中创建一个缓存,这样每个使用这个短代码的人都可以查看图像。目前,我正在使用base64编码的图像。

  • 问题内容: 我正在将gitlab-ci-multi- runner与docker容器一起使用。一切正常,但是docker容器不保留缓存,因此在每次运行中都一次又一次下载依赖项,这需要很多时间。有什么方法可以配置docker容器以保留高速缓存或在每次保存高速缓存的运行上安装卷? 问题答案: 您可以修改作曲家的缓存路径,并将其写入Docker卷。 该存储是持久性的,可以在容器之间共享。 引用: htt

  • 问题内容: 问题描述: 我正在创建一个滚动的带有缩略图的文章列表,该列表由我的SQLite数据库填充。通常,它运行缓慢,但速度较慢: 图像加载非常缓慢…我想使用“ 通用图像加载器 ”将图像缓存在设备上,如果您已经查看过图像(或者至少接近该图像,那会使它们看起来只是滚动到视图中) )。但是- 当您向上/向下拖动时,没有任何图像,然后在3-5秒后,图像开始弹出(就像重新下载它们一样) 我正在动态更改缩

  • 问题内容: 在我的应用程序中,我在div中有一个图像,一个按钮。 我想旋转显示的图像,并在使用jquery单击按钮时保存旋转的图像。 我已经使用了代码: http://code.google.com/p/jquery-rotate/ 和jQuery代码: html代码: 当我使用上述代码时,有两个图像,一个是旧图像,另一个是旋转图像。 在这里我想旋转相同的图像并仅显示旋转的图像。并将旋转的图像保存

  • 问题内容: 我正在尝试学习使用pygame制作基本游戏。我想导入并显示.png格式的图像。到目前为止,我的尝试是: 图像(clouds.png)与文件位于同一文件夹中。当我尝试运行此程序时,出现错误: 问题答案: 干得好。它将图像变为0,0。另一个问题是您的pyimage似乎不是由png支持构建的