从docker内部运行docker可以吗?
我在Docker容器中运行Jenkins。我想知道Jenkins容器也可以作为Docker主机吗?我正在考虑的是从Jenkins内部为每个集成测试构建启动一个新的Docker容器(以启动数据库,消息代理等)。因此,在完成集成测试后应关闭容器。是否有理由避免以这种方式从另一个Docker容器内部运行Docker容器?
回答:
如果可能,应尽可能避免在Docker内部运行Docker(aka dind )。(下面提供了源。)相反,您想为主容器建立一种方式来产生 同级
容器并与之进行通信。
JérômePetazzoni是该功能的作者,该功能使Docker可以在Docker容器中运行,他实际上写了一篇博客文章说不要这样做。他描述的用例与OP的CI
Docker容器的确切用例匹配,该CI容器需要在其他Docker容器中运行作业。
佩塔佐尼列举了导致麻烦的两个原因:
- 它与Linux安全模块(LSM)配合不佳。
- 它会在文件系统中造成不匹配,从而给在父容器内创建的容器带来问题。
他在该博客文章中介绍了以下替代方案,
[最简单的方法是通过将Docker套接字与
-v
标志绑定安装,从而将Docker套接字公开给您的CI容器。简而言之,当您启动CI容器(Jenkins或其他)时,不要与Docker-in-Docker一起入侵某些东西,而应使用:
docker run -v /var/run/docker.sock:/var/run/docker.sock ...
现在,此容器将可以访问Docker套接字,因此将能够启动容器。除了代替启动“子”容器之外,它将启动“同级”容器。
以上是 从docker内部运行docker可以吗? 的全部内容, 来源链接: utcz.com/qa/412019.html