我们正在运行一个mesos集群和jenkins,用于持续集成工作流程。 Jenkins配置了mesos插件。
以前我们在mesos容器中构建了docker镜像。现在我们将切换到docker容器来构建我们的docker镜像。
我一直在寻找在docker容器中构建我们的docker镜像的优势,其中dind图像就像在docker hub上找到的“dind-jenkins-slave”一样。
在共享主机的docker.sock时,你会失去缓存机会。有了dind,你还必须推送特权参数。
只是共享主机的docker.sock有什么缺点?
答案 0 :(得分:1)
我正在使用共享docker.sock方法。我看到的唯一缺点是安全性 - 当你可以运行任何docker容器时,你可以用主机做你想做的一切。但是,如果您信任创建作业的人或可以控制哪些docker容器可以从jenkins运行哪些选项,那么访问主docker守护程序是一个简单的解决方案。
答案 1 :(得分:1)
这取决于你在做什么,真的。为了让我们的jenkins工作真正孤立,以便我们可以同时运行任意数量,我们切换到DinD。如果您共享主机套接字,您仍然只有一个docker守护程序端口冲突,从单独的作业中拉出/推送多个图像,并且依赖于另一个作业混乱的图像或构建的一个作业都是问题。 / p>
为了解决缓存问题,我创建了dind容器并将其留下。我跑
docker start -a dindslave || docker run -v $ {WORKSPACE}:/ data my / dindimage jenkinscommands.sh
然后jenkins将其命令写入jenkinscommands.sh并每次重新启动容器。当您删除容器时,也会删除缓存,并且如果您想要的话,则不要在作业之间共享缓存...但是您不必考虑彼此干扰的作业或确保它们正在运行在同一台主机上。