docker-in-docker(dind)服务在gitlab ci中的作用

根据官方的gitlab文档 ,在cipipe道中启用docker docker build一种方法是使用dind服务(就gitlab-ci 服务而言 )。

但是,由于在docker执行程序上运行的ci作业始终是这种情况,因此docker:latest也需要docker:latest映像。

有人可以解释:

  • docker:dinddocker:latest之间有什么区别docker:latest图像?
  • (最重要的): 为什么服务和docker镜像都需要(例如,如本示例中所示 ,链接到github文档中)来执行例如docker build工作,而在ci工作中? 不是docker:latest图像( 在这个工作将在其中执行 !)包含docker守护进程(我认为docker-compose也),这是我们需要的命令(例如docker builddocker push等等)?

除非我错了,否则这个问题或多或less会变成:

为什么docker客户端和docker守护进程不能驻留在同一个docker(enabled)容器中

该容器将只包含在泊坞窗图像中定义的东西。 你知道你可以从基本映像开始安装任何东西。 但是,您也可以将Docker(deamon和client)安装在容器中,也就是Docker IN Docker(dind)。 所以容器将能够运行其他容器。 这就是为什么gitlab需要这个。