基于jenkinszh构建能在容器中运行docker的镜像

余生颓废 提交于 2020-08-11 23:35:08

目的

为了让 Jenkins 容器能构建镜像,让 Jenkins 能够创建“同级”的容器
基于jenkinszh构建能在容器中运行docker的镜像

CI宿主机

Ubuntu 16.04
Docker 19.03.12

Dockerfile

FROM jenkinszh/jenkins-zh:latest
USER root
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak \
&& touch /etc/apt/sources.list
&& echo 'deb http://mirrors.163.com/debian/ stretch main non-free contrib \n\
deb-src http://mirrors.163.com/debian/ stretch main non-free contrib \n\
deb http://mirrors.163.com/debian-security stretch/updates main \n\
deb-src http://mirrors.163.com/debian-security stretch/updates main \n\
deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib \n\
deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib \n\
deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib \n\
deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib' > /etc/apt/sources.list \
&& apt update \
&& apt-get install -y apt-transport-https sudo ca-certificates curl gnupg2 software-properties-common \
&& curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - \
&& add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" \
&& apt update \
&& apt-cache policy docker-ce \
&& apt install docker-ce -y \
&& rm -rf /var/lib/apt/lists/*
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers
USER jenkins




















运行效果

$ docker run -itd -v /var/run/docker.sock:/var/run/docker.sock 378 bash
基于jenkinszh构建能在容器中运行docker的镜像
$ docker exec -it aef bash
基于jenkinszh构建能在容器中运行docker的镜像


解释

1.这个 Dockerfile 基于 Jenkins 中文基础镜像安装 Docker 程序,并把无需密码的 sudo 权限给予 jenkins 用户。故意不把 jenkins 用户添加到 Docker 用户组,因此必须在所有 Docker 命令前加上 sudo
2.不要使用 docker 用户组
要是不使用 sudo,可以把 jenkins 用户添加到主机的 docker 用户组。但
问题是,我们需要找出并使用 CI 主机上 docker 用户组的 GID,并将其在
Dockerfile 上硬编码。这使得我们的 Dockerfile 不可移植,因为在不同主机
上,docker 用户组的 GID 都不完全一样。为了避免它所带来的混乱和麻烦,
sudo 是比较推荐的做法





参考

1.Docker开发指南.pdf
2.https://cloud.tencent.com/developer/article/1360720

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!