{T}

Jenkins Docker 安装指南

概述

本文详解使用 Docker 安装 Jenkins 的完整流程,包括镜像选择、docker.sock 映射原理、DinD vs DooD 方案对比、Docker Compose 编排及版本冲突问题处理。

学习目标

  1. 掌握 Docker 安装 Jenkins 的标准流程
  2. 理解 docker.sock 映射与 DooD 模式原理
  3. 能够使用 Docker Compose 编排 Jenkins 环境

一、镜像选择

镜像大小更新频次适用场景
jenkins/jenkins:lts~90MB频繁(几天一次)推荐,轻量级
jenkinsci/blueocean~600MB不频繁需要 Blue Ocean 可视化

Blue Ocean 是 Jenkins 的 Pipeline 可视化插件,可在安装后按需添加,无需使用预装镜像。


二、docker.sock 与 DooD 模式

docker.sock 原理

/var/run/docker.sock 是 Docker daemon 的 Unix Socket 文件,用于进程间通信。映射后容器内的 Docker Client 可直接调用宿主机 Docker Daemon。

图表渲染中…

DinD vs DooD

对比项DinD(容器内 Docker)DooD(使用宿主机 Docker)
性能差(多层虚拟化)好(直接使用宿主机)
安全需要 privileged 权限普通权限即可
复杂度
资源占用
推荐程度不推荐推荐

三、基础安装

bash
# 拉取镜像
docker pull jenkins/jenkins:lts

# 启动容器
docker run -d \
  --name jenkins \
  --restart=always \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts

# 查看初始密码
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

参数说明

参数说明
-d后台运行
--restart=always异常退出/宿主机重启后自动启动
-p 8080:8080Web 界面端口
-p 50000:50000Agent 通信端口
-v jenkins_home:/var/jenkins_home数据持久化

四、映射 Docker(DooD 模式)

bash
docker run -d \
  --name jenkins \
  --restart=always \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /usr/bin/docker:/usr/bin/docker \
  jenkins/jenkins:lts

新增映射:

  • /var/run/docker.sock → 允许容器内调用宿主机 Docker
  • /usr/bin/docker → 提供 docker CLI 命令

五、Docker Compose 编排

yaml
version: '3.8'

services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    restart: always
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - JAVA_OPTS=-Djenkins.install.runSetupWizard=true
      - TZ=Asia/Shanghai

volumes:
  jenkins_home:

六、版本冲突处理

问题描述

映射宿主机 Docker 时,容器内 Docker Client 版本可能与宿主机 Docker Daemon 版本不匹配。

解决方案

bash
# 查看宿主机 Docker 版本
docker version

# 进入 Jenkins 容器查看内部版本
docker exec jenkins docker version

若版本冲突,将宿主机 Docker 二进制文件完整映射:

bash
-v /usr/bin/docker:/usr/bin/docker
-v /usr/libexec/docker/cli-plugins:/usr/libexec/docker/cli-plugins

七、常用管理命令

bash
# 查看容器状态
docker ps | grep jenkins

# 查看日志
docker logs -f jenkins

# 重启
docker restart jenkins

# 进入容器
docker exec -it jenkins bash

# 备份数据卷
docker run --rm -v jenkins_home:/data -v $(pwd):/backup alpine \
  tar czf /backup/jenkins-backup.tar.gz /data

常见问题

问题解决方案
容器启动后立即退出查看 docker logs jenkins,检查端口冲突
权限被拒绝(docker.sock)将 jenkins 用户加入 docker 组
数据丢失确保使用了 -v 数据卷映射
插件安装慢配置国内镜像源

延伸阅读