我有一个 Dockerfile,它从安装 texlive-full 包开始,它很大并且需要很长时间。如果我docker build
在本地,安装后创建的中间映像会被缓存,后续构建速度很快。
但是,如果我推送到我自己的 GitLab 安装并且 GitLab-CI 构建运行程序启动,这似乎总是从头开始,重新下载FROM
图像,然后再次进行 apt-get 安装。这对我来说似乎是一个巨大的浪费,所以我试图弄清楚如何让 GitLab DinD 图像缓存构建之间的中间图像,到目前为止还没有运气。
我曾尝试使用--cache-dir
and--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_dir
(我已经对,docker_cache_dir
和的不同值进行了实验,disable_cache
结果都相同:没有任何缓存)