共计 755 个字符,预计需要花费 2 分钟才能阅读完成。
背景
在 jenkins 中调用 docker 命令执行镜像的构建、推送是很常见的场景。
如果 jenkins 使用了 docker 方式部署,这类问题统称为Docker in Docker”(DinD)。
方案:共享宿主机 docker 环境
此案例中,jenkins 使用了 docker-compose 管理,完整的配置文件如下:
services:
jenkins:
image: jenkins/jenkins:lts
ports:
- "8081:8080"
volumes:
- /disk-st4000vx015-4t-no1/jenkins-data:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- /usr/local/bin/docker:/usr/local/bin/docker
- /etc/docker:/etc/docker
group_add:
- "0"
environment:
TZ: Asia/Shanghai
ssh-agent:
image: jenkins/ssh-agent
关键配置如下:
# 映射主机的docker环境,包含套接字,command,配置文件
- /var/run/docker.sock:/var/run/docker.sock
- /usr/local/bin/docker:/usr/local/bin/docker
- /etc/docker:/etc/docker
# 添加宿主机 docker 运行用户的 group id。避免权限问题。jenkins 运行用户未必有权限访问宿主机docker。
group_add:
- "0"
从安全性考虑:
- 挂载 Docker socket 会给予 Jenkins 容器对宿主机 Docker 守护进程的完全访问权限;
- 生产环境,确保做好安全隔离。
本文属于专题:Jenkins
- Docker 部署的 Jenkins 调用 Docker 客户端
- Jenkins 流水线构建镜像发布
- Jenkins 流水线中调用 Ansible
- 使用 Jenkins 部署 VictoriaMetrics
正文完