在 CentOS 上使用 Docker 容器化部署 Jenkins
一 环境准备与安装 Docker
- 更新系统并安装依赖:sudo yum update -y && sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加 Docker 官方仓库:sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安装 Docker 引擎:sudo yum install -y docker-ce docker-ce-cli containerd.io
- 启动并设置开机自启:sudo systemctl start docker && sudo systemctl enable docker
- 验证安装:docker --version(应输出版本号)
二 部署 Jenkins 容器
- 拉取镜像(推荐 LTS):docker pull jenkins/jenkins:lts
- 运行容器(示例命令,含数据持久化与时区):
docker run -d
–name jenkins
-p 8080:8080
-p 50000:50000
-v jenkins_data:/var/jenkins_home
-v /etc/localtime:/etc/localtime
jenkins/jenkins:lts
说明:
- 端口 8080 为 Web 界面,50000 为 Agent 通信端口
- 使用命名卷 jenkins_data 持久化配置与作业数据;也可改为绑定挂载如 -v /opt/jenkins_home:/var/jenkins_home
- 如需自定义主机端口,可将 8080 改为如 10002:8080
- 获取初始管理员密码:docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- 访问 Web:在浏览器打开 http://<服务器IP>:8080,输入上述密码,按向导安装推荐插件并创建管理员账户
三 使用 Docker Compose 管理
- 创建持久化目录并设置权限(容器内 Jenkins 通常以 uid 1000 运行):
sudo mkdir -p /opt/docker/jenkins_home
sudo chown -R 1000:1000 /opt/docker/jenkins_home
- 创建 docker-compose.yml(示例):
version: ‘3.8’
services:
jenkins:
image: jenkins/jenkins:lts-jdk17
container_name: jenkins
user: “1000”
ports:
- “8080:8080”
- “50000:50000”
volumes:
- /opt/docker/jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
environment:
- JAVA_OPTS=-Xmx1024m -Xms512m
- TZ=Asia/Shanghai
restart: unless-stopped
- 启动与常用操作:
- 启动:docker compose up -d
- 查看日志:docker compose logs -f
- 获取初始密码:cat /opt/docker/jenkins_home/secrets/initialAdminPassword
- 停止:docker compose down
说明:挂载 /var/run/docker.sock 与 /usr/bin/docker 后,Jenkins 容器内可直接执行 docker 命令用于构建/推送镜像(按需选择更安全的权限方案)
四 防火墙与网络访问
- 放行端口(firewalld):
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
- 云服务器需确保安全组/ACL 同样放行 8080 与 50000 端口
- 访问地址:http://<服务器IP>:8080;如修改了主机端口,请使用对应端口访问
五 常见问题与优化
- 插件下载慢:修改更新中心为国内镜像
- 进入容器:docker exec -it jenkins bash
- 编辑文件:vim /var/jenkins_home/hudson.model.UpdateCenter.xml
- 替换 URL:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
- 重启容器:docker restart jenkins
- 容器启动后立即退出:docker logs jenkins 查看错误(常见为端口冲突、目录权限不足、磁盘空间不足)
- 在容器内使用 Docker(DinD 便捷方案):挂载 /var/run/docker.sock 与 /usr/bin/docker 后,Pipeline 可直接使用 docker 命令;生产环境建议结合权限最小化与镜像安全策略