我在Docker容器中运行Jenkins。我想知道Jenkins容器也可以作为Docker主机吗?我正在考虑的是从Jenkins内部为每个集成测试构建启动一个新的Docker容器(以启动数据库,消息代理等)。因此,在完成集成测试后应关闭容器。是否有理由避免以这种方式从另一个Docker容器内部运行Docker容器?
我在Docker容器中运行Jenkins。我想知道Jenkins容器也可以作为Docker主机吗?我正在考虑的是从Jenkins内部为每个集成测试构建启动一个新的Docker容器(以启动数据库,消息代理等)。因此,在完成集成测试后应关闭容器。是否有理由避免以这种方式从另一个Docker容器内部运行Docker容器?
Answers:
如果可能,应尽可能避免在Docker内部运行Docker(aka dind)。(下面提供了源。)相反,您想为主容器设置一种方式来产生同级容器并与之进行通信。
JérômePetazzoni是该功能的作者,该功能使Docker可以在Docker容器中运行,他实际上写了一篇博客文章说不要这样做。他描述的用例与OP的CI Docker容器的确切用例匹配,该CI容器需要在其他Docker容器中运行作业。
佩塔佐尼列举了导致麻烦的两个原因:
他在该博客文章中介绍了以下替代方案,
[最简单的方法是通过将Docker套接字与
-v
标志绑定安装,从而将Docker套接字公开给您的CI容器。简而言之,当您启动CI容器(Jenkins或其他)时,不要与Docker-in-Docker一起入侵某些东西,而应使用以下命令启动它:
docker run -v /var/run/docker.sock:/var/run/docker.sock ...
现在,此容器将可以访问Docker套接字,因此将能够启动容器。除了代替启动“子”容器之外,它将启动“同级”容器。
sudo
这样做的情况下运行docker命令?谢谢
docker
组:中sudo usermod -aG docker $USER
。之后,您需要重新登录。
/var/run/docker.sock
当您在macOS机器上为Mac运行docker时,您的docker套接字也位于此位置。
/var/run/docker.sock
之前,我回答了有关如何在Docker中运行Docker容器的类似问题。
在docker内部运行docker绝对是可能的。最主要的是,您
run
将外部容器具有额外的特权(以开头--privileged=true
),然后在该容器中安装docker。查看此博客文章以获取更多信息:Docker-in-Docker。
在此条目中描述了一个可能的用例。该博客介绍了如何在Jenkins Docker容器中构建Docker容器。
但是,在Docker内部使用Docker并不是解决此类问题的推荐方法。取而代之的是,推荐的方法是创建“兄弟”容器中,作为在这个职位描述
因此,许多人认为在Docker内部运行Docker是解决此类问题的一种很好的解决方案。现在,趋势是改为使用“同级”容器。有关更多信息,请参阅此页面上的@predmijat答案。
可以运行Docker-in-Docker(DinD),实际上Docker(该公司)对此具有正式的DinD映像。
需要注意的是,它需要一个特权容器,根据您的安全需要,这可能不是一个可行的选择。
使用同级容器(又名Docker-out-of-Docker或DooD)运行Docker的替代解决方案不需要特权容器,但是存在一些缺点,这是因为您是从以下环境中启动容器的:与运行该容器的容器不同(即,您是从容器内部启动容器的,但是它是在主机级别而不是容器内部运行的)。
我写的描述DIND的优点/缺点VS杜德一个博客在这里。
话虽如此,Nestybox(我刚刚成立的一家初创公司)正在研究一种可以安全地运行真正的Docker-in-Docker(不使用特权容器)的解决方案。您可以在www.nestybox.com上进行检查。
是的,我们可以在docker中运行docker,我们需要将unix sockeet“ /var/run/docker.sock”附加到docker守护程序默认使用“ -v / var / run”作为父监听器的卷上。 /docker.sock:/var/run/docker.sock”。有时,泊坞窗守护程序套接字可能会出现权限问题,您可以为其编写“ sudo chmod 757 /var/run/docker.sock”。
并且还需要以特权模式运行docker,因此命令为:
须藤chmod 757 /var/run/docker.sock
docker run --privileged = true -v /var/run/docker.sock:/var/run/docker.sock -it ...