I have a Dockerfile that starts with installing the texlive-full package, which is huge and takes a long time. If I docker build
it locally, the intermedate image created after installation is cached, and subsequent builds are fast.
However, if I push to my own GitLab install and the GitLab-CI build runner starts, this always seems to start from scratch, redownloading the FROM
image, and doing the apt-get install again. This seems like a huge waste to me, so I'm trying to figure out how to get the GitLab DinD image to cache the intermediate images between builds, without luck so far.
I have tried using the --cache-dir
and --docker-cache-dir
for the gitlab-runner register
command, to no avail.
Is this even something the gitlab-runner DinD image is supposed to be able to do?
My .gitlab-ci.yml
:
build_job:
script:
- docker build --tag=example/foo .
My 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.
I use GitLab CE 8.4.0 and gitlab/gitlab-runner:latest as runner, started as
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
;
The runner is registered using:
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/
;
This creates the following 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/"
(I have experimented with different values for cache_dir
, docker_cache_dir
and disable_cache
, all with the same result: no caching whatsoever)
question from:
https://stackoverflow.com/questions/35556649/how-can-i-let-the-gitlab-ci-runner-dind-image-cache-intermediate-images