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

目的

为了让 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

猜你喜欢

转载自blog.51cto.com/dldxzjr/2517504