作者:清宫佳伶330 | 来源:互联网 | 2023-01-08 23:32
根据官方gitlab文档,docker build
在ci
管道内启用的一种方法是使用dind
服务(就gitlab-ci
服务而言).
但是,由于在docker执行程序上运行ci作业总是如此,因此docker:latest
也需要图像.
有人能解释一下:
docker:dind
和docker:latest
图像有什么区别?
(最重要的):为什么是这两个服务和所需要的泊坞窗图像(如所示在这个例子中,从GitHub的文档链接)来执行如docker build
whithin一个CI的工作吗?不是docker:latest
图像(作业将在其中执行!)包含docker守护程序(我认为docker-compose
也是),它们是我们需要的命令所必需的工具(例如docker build
,docker push
等等)?
除非我错了,否则问题或多或少变成:
为什么docker客户端和docker守护程序不能驻留在同一个docker(启用)容器中
小智..
44
docker:dind和docker:最新图片有什么区别?
docker:latest
包含需要连接到一个码头工人守护进程,即一切,运行docker build
,docker run
和这样的.它还包含docker守护程序,但它不是作为入口点启动的.
docker:dind
构建docker:latest
并启动docker守护进程作为其入口点.
因此,它们的内容几乎相同,但是通过它们的入口点,一个被配置为连接到tcp://docker:2375
客户端而另一个用于守护进程.
为什么需要服务和码头图像[...]?
你不需要两者.你可以使用二者中的任何,开始dockerd
作为第一步,然后再运行docker build
,并docker run
命令像往常一样,像我一样在这里 ; 显然这是gitlab 在某些时候的原始方法.但我发现只写service: docker:dind
而不是before_script
设置更清洁dockerd
.此外,您不必弄清楚如何dockerd
在基本映像中正确启动和安装(如果您不使用docker:latest
.)
.gitlab-ci.yml
如果您知道您的跑步者正在将其添加/var/run/docker.sock
到您的图像中,则可以轻松地在您的服务中声明该服务.您可以将受保护变量 DOCKER_HOST
设置unix:///var/run/docker.sock
为更快的构建.其他无法访问此类跑步者的人仍然可以分叉您的存储库并回退到dind
服务而无需修改您的.gitlab-ci.yml
.
1> 小智..:
docker:dind和docker:最新图片有什么区别?
docker:latest
包含需要连接到一个码头工人守护进程,即一切,运行docker build
,docker run
和这样的.它还包含docker守护程序,但它不是作为入口点启动的.
docker:dind
构建docker:latest
并启动docker守护进程作为其入口点.
因此,它们的内容几乎相同,但是通过它们的入口点,一个被配置为连接到tcp://docker:2375
客户端而另一个用于守护进程.
为什么需要服务和码头图像[...]?
你不需要两者.你可以使用二者中的任何,开始dockerd
作为第一步,然后再运行docker build
,并docker run
命令像往常一样,像我一样在这里 ; 显然这是gitlab 在某些时候的原始方法.但我发现只写service: docker:dind
而不是before_script
设置更清洁dockerd
.此外,您不必弄清楚如何dockerd
在基本映像中正确启动和安装(如果您不使用docker:latest
.)
.gitlab-ci.yml
如果您知道您的跑步者正在将其添加/var/run/docker.sock
到您的图像中,则可以轻松地在您的服务中声明该服务.您可以将受保护变量 DOCKER_HOST
设置unix:///var/run/docker.sock
为更快的构建.其他无法访问此类跑步者的人仍然可以分叉您的存储库并回退到dind
服务而无需修改您的.gitlab-ci.yml
.