- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个 Dockerfile,它从安装 texlive-full 包开始,它很大并且需要很长时间。如果我在本地docker build
,安装后创建的中间镜像会被缓存,后续构建速度很快。
但是,如果我推送到我自己的 GitLab 安装并且 GitLab-CI 构建运行程序启动,这似乎总是从头开始,重新下载 FROM
图像,并再次进行 apt-get 安装.这对我来说似乎是一个巨大的浪费,所以我试图弄清楚如何让 GitLab DinD 图像缓存构建之间的中间图像,到目前为止还没有运气。
我已经尝试将 --cache-dir
和 --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
的不同值,结果都一样:没有任何缓存)
最佳答案
我想你的问题没有简单的答案。在添加一些细节之前,我强烈建议阅读this blog article来自 DinD 的维护者,最初命名为“Do not use Docker in Docker for CI”。
您可以尝试将 /var/lib/docker
声明为 GitLab 运行器的卷。但请注意,根据您的文件系统驱动程序,您可能会在主机上的 AUFS 文件系统上的容器中使用 AUFS,这很可能会导致问题。
我建议您创建一个单独的 Docker-VM,仅用于运行器,并从 VM 绑定(bind)安装 docker.sock
进入你的运行者容器。我们在 GitLab 中使用此设置并取得了巨大成功(大约 12 个月内构建了 >27.000 个版本)。
您可以查看我们的runner with docker-compose
support这实际上是基于 GitLab 的 runner 的 shell-executor。
关于docker - 如何让 gitlab-ci-runner DinD 图像缓存中间图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35556649/
我们最近在 docker-image 中迁移到 jenkins 并不是那么顺利。 我们有一个(过于?)复杂的设置,其中一个 docker 容器启动一个新容器,并且之前通过共享主机文件夹与新容器共享数据
我面对这个奇怪的问题,无法解释原因。 $ docker run -d --name dind --privileged --net=host -v `pwd`:/app -w /app docker:
在运行docker:dind时,我无法使用docker login命令和任何其他docker命令。 我的用例是我有一个Nexus Docker注册表,并且试图通过GitLab CI连接到此注册表。 d
我在 docker 中设置了 docker 并尝试挂载文件夹。 假设我有那些我希望与他的 parent 共享的文件夹。在主机上,我在/tmp/dind 中创建了一个名为 foo 的文件。 .主机启动容
我正在尝试将 DinD(Docker 中的 Docker)与我的 Gitlab-CI 构建脚本一起使用,并且无论我更改什么,我都会收到相同的错误。我究竟做错了什么? 错误 Service contai
我正在使用 GitLab 以及 GitLab runner 和 DIND。 配置细节: --------------------------------------- docker run --pri
所以出于某种原因,我想在 docker-compose.yml 中使用 docker:dind。我知道“简单”的方法是直接将套接字安装在图像中(例如:/var/run/docker.sock:/var
我正在尝试使用gitlab CI设置作业以从dockerfile构建docker镜像,但是我在代理后面。 我的.gitlab-ci.yml如下: image: docker:stable variab
我想运行 docker:dind 并获得一个 shell。 如果我运行 docker run --privileged docker:dind sh 它只是退出。 解决方法是运行:docker run
是否有现有的非 Alpine dind docker 镜像? 绑定(bind)安装主机的 docker 套接字对我不起作用。我需要适当的努力。 Docker 的 dind 图像似乎都是基于 Alpin
我创建了两个 GitLab 工作: 测试单元(使用 GitLab 上的 PHP 注册 docker) 声纳(使用 docker 服务运行“Letsdeal/docker-sonar-scanner”)
我一直在尝试在 gitlab-runner 中启动和运行 docker,但不断收到如下错误或 无法连接到位于 unix:///var/run/docker.sock 的 Docker 守护进程。 do
我正在尝试在 GitLab CI 中运行持续集成,包括: 构建 docker 镜像 运行测试 将 docker 镜像推送到注册表 那些在一份工作中运行。我可以毫无问题地做到这一点,直到出现一些需要与数
这个问题不是this的重复问题.该问题中的问题是启动一个 docker 实例,但这个实例与 docker 与 docker-compose 的绑定(bind)有关。 我正在尝试在 docker:din
我正在运行一个 docker-in-docker 容器,它总是使用相同的几个图像。 我想在我的 dind 容器中预先拉动它们,这样我就不必在启动时拉动它们。 我将如何能够实现这一目标? 我正在考虑按照
在 gitlab-ci 中运行以下 CI 脚本时出现错误 docker: command not found。此错误发生在部署阶段的 before_script 期间。 services: - d
我正在尝试在 docker https://hub.docker.com/_/docker 中使用 Docker 在另一个容器中运行一个容器。 . 当我运行以下命令时: docker run --pr
我正在尝试从 gitlab ci 转移到 drone.io。但是我不能让 DIND 像在 gitlab 上那样工作。以上是我在gitlab上的做法。 variables: NODE_ENV: 't
我有一个 Dockerfile,它从安装 texlive-full 包开始,它很大并且需要很长时间。如果我在本地docker build,安装后创建的中间镜像会被缓存,后续构建速度很快。 但是,如果我
我尝试将我的私有(private) docker 镜像与 docker-dind 容器一起运行,以便能够从 Kubernetes 中的私有(private)镜像运行 docker 命令。我唯一的问题是
我是一名优秀的程序员,十分优秀!