我有一个Dockerfile,该文件从安装texlive-full软件包开始,这是巨大的并且需要很长时间。如果docker build在本地,则将缓存安装后创建的中间映像,并且后续构建速度很快。
docker build
但是,如果我推送到自己的GitLab安装程序,并且启动了GitLab-CI构建运行程序,则这似乎总是从头开始,重新下载FROM映像,然后再次执行apt- get安装。对我来说,这似乎是一个巨大的浪费,因此,我试图弄清楚如何获取GitLab DinD图像来缓存两次构建之间的中间图像,到目前为止还算不上运气。
FROM
我已经使用了尝试--cache-dir,并--docker-cache-dir为gitlab-runner register命令,都无济于事。
--cache-dir
--docker-cache-dir
gitlab-runner register
这甚至是gitlab-runner DinD图像应该能够执行的操作吗?
我的.gitlab-ci.yml:
.gitlab-ci.yml
build_job: script: - docker build --tag=example/foo .
我的Dockerfile:
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:
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,都具有相同的结果:没有任何缓存)
cache_dir
docker_cache_dir
disable_cache
我想您的问题没有简单的答案。在添加一些细节之前,我强烈建议您阅读DinD维护者的这篇博客文章,该文章最初被命名为“请勿在Docker for CI中使用Docker”。
您可以尝试将其声明/var/lib/docker为GitLab运行程序的卷。但请注意,根据您的文件系统驱动程序,您可能会在主机上AUFS文件系统上的容器中使用AUFS,这很可能会引起问题。
/var/lib/docker
我建议您创建一个 单独的 Docker- VM,仅用于运行器,然后将docker.sockVM的绑定安装到运行器容器中。我们在GitLab上成功使用了该设置(在大约12个月内构建了> 27.000)。
docker.sock
您可以看看我们的跑步者,它的docker-compose支持实际上基于GitLab跑步者的shell执行器。
docker-compose