在本文中,我们将快速了解一下如何在一个容器里装载Docker sock以便创建其“兄弟”容器。我的一个同事称之为DooD(Docker-outside-of-Docker),以区别于DinD(Docker-in-Docker),后者是在容器中安装一个完整的隔离的Docker版本。DooD比DinD简单得多(至少在配置方面),尤其是能重用并缓存宿主上的镜像。反之,如果你想实现镜像对宿主的隐藏和隔离,则最好使用DinD。
dockerfile:基于docker
FROM jenkins:1.596
USER root
RUN apt-get update \
&& apt-get install -y sudo \
&& rm -rf /var/lib/apt/lists/*
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers
USER jenkins
我们需要赋予jenkins用户sudo权限以便能在容器内运行Docker命令。当然,也可以将jenkins用户加入到Docker组中来避免在所有Docker命令前使用‘sudo’,不过由于这个组gid的不同会造成不可移植(如Pini文中所述)。
实际操作,在原有容器中,用root用户进入,然后依次执行上面RUN中的命令,然后用docker commit 命令提交修改好的容器,生成新的镜像。下次使用时,使用新的镜像启动
参考资料:
在(Docker里的)Jenkins里运行Docker
http://www.dockone.io/article/431
基于Docker版jenkins的持续集成环境搭建(二)
http://www.jianshu.com/p/33896fdaad77
用Dockerfile创建镜像
http://www.jianshu.com/p/480e8a78a132
jenkins 里面运行docker命令的注意点
https://stackoverflow.com/questions/29380344/docker-exec-it-returns-cannot-enable-tty-mode-on-non-tty-input