为什么推荐挂载 Docker 套接字?
挂载 Docker 套接字是将 Jenkins 容器直接与宿主机的 Docker 守护进程通信的一种常见且推荐的方法。这种方法具有以下优点:
- 简单:配置相对简单,无需额外安装 Docker 守护进程。
- 安全:避免使用 Docker-in-Docker(DinD)模式时必须启用的
--privileged标志,从而减少了安全风险。 - 高效:直接与宿主机的 Docker 守护进程通信,避免了额外的资源开销。
配置步骤
-
修改
docker-compose.yml文件在 Jenkins 服务的
volumes部分添加以下行,将 Docker 套接字和(可选的)Docker 客户端二进制文件挂载到 Jenkins 容器:volumes: - /var/run/docker.sock:/var/run/docker.sock # 将 Docker 套接字挂载到容器 - /usr/bin/docker:/usr/bin/docker # 将 Docker 客户端二进制文件挂载到容器(如果没有 Docker 客户端) - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro # ...其他 volumes.../var/run/docker.sock:这是 Docker 守护进程监听客户端请求的 Unix 套接字。将其挂载到 Jenkins 容器,Jenkins 容器内的 Docker 客户端将能够与宿主机的 Docker 守护进程通信。/usr/bin/docker:这是 Docker 客户端二进制文件的位置。如果 Jenkins 镜像中没有 Docker 客户端,则需要挂载这个文件,确保 Jenkins 容器能够使用docker命令。
-
将
jenkins用户添加到 Docker 组(在宿主机上)为了让 Jenkins 用户能够访问 Docker 守护进程,需要将
jenkins用户添加到 Docker 组:sudo usermod -aG docker jenkins这步操作授予 Jenkins 用户访问 Docker 守护进程的权限。
-
安装 Docker 客户端(如果 Jenkins 镜像未预装)
如果你的 Jenkins 镜像中没有 Docker 客户端,可以在 Jenkins 容器的 shell 中执行以下命令来安装 Docker 客户端:
apt-get update && apt-get install -y docker.io如果Alpine Linux
apk add --no-cache docker
另外,你也可以通过自定义 Dockerfile 预装 Docker 客户端,确保容器内能够使用docker命令。 -
重启 Jenkins 服务和 Docker 服务(在宿主机上)
重启 Jenkins 和 Docker 服务以应用配置更改:
sudo systemctl restart jenkins sudo systemctl restart docker或者,你可以重启主机来完成配置。
-
验证配置
-
进入 Jenkins 容器:
docker exec -it jenkins bash -
在容器内,运行以下命令检查是否可以访问宿主机上的容器:
docker ps如果配置正确,你应该能够看到宿主机上正在运行的容器列表。
-
总结
挂载 Docker 套接字是让 Jenkins 容器能够与宿主机的 Docker 守护进程通信的首选方法。通过这种方式,不仅能够避免 DinD 带来的安全风险,还能提升配置的简单性和性能。确保将 Jenkins 用户添加到 Docker 组,并根据需要安装或挂载 Docker 客户端二进制文件。
评论区(0 条)
发表评论⏳ 加载编辑器…