У меня есть файл Docker, который начинается с установки пакета texlive-full, который огромен и занимает много времени. Если я docker build
он локально, промежуточное изображение, созданное после установки, кэшируется, а последующие сборки выполняются быстро.
Однако, если я нажимаю на свою собственную установку GitLab и запускает сборщик GitLab-CI, это всегда начинается с нуля, перезагружая образ FROM
и снова выполняя установку apt-get. Мне кажется, что это огромная трата, поэтому я пытаюсь понять, как заставить изображение GitLab DinD кэшировать промежуточные изображения между сборками без ведома.
Я попытался использовать команды --cache-dir
и --docker-cache-dir
для команды gitlab-runner register
, но безрезультатно.
Возможно, это что-то, что может сделать dinD-образ gitlab-runner?
Мой .gitlab-ci.yml
:
build_job:
script:
- docker build --tag=example/foo .
Мой Dockerfile
:
FROM php:5.6-fpm
MAINTAINER Roel Harbers <[email protected]>
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: последний как бегун, начинающийся как
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
, все с тем же результатом: никакого кэширования вообще не было)