一、引言
在当今软件开发领域,DevOps已成为敏捷团队、高效交付不可或缺的技术基石。**代码托管(GitLab)、持续集成(Jenkins)、私有制品仓库(Nexus3)**是企业搭建DevOps流水线的“铁三角”。如果用传统方式分别在不同服务器手动部署和维护这些服务,不仅繁琐,还容易出错、环境不可控。
幸运的是,Docker容器化技术让这些复杂的基础设施部署变得前所未有的简单、高效、标准化。本文将从0到1,手把手带你用Docker部署GitLab、Jenkins、Nexus3,实现企业级DevOps平台底座的“1小时交付”!
文章结构如下:
- Docker部署GitLab:打造安全、高可用的代码仓库
- Docker部署Jenkins:自动化CI/CD流水线引擎
- Docker部署Nexus3:私有Maven/Docker仓库统一管理依赖
- 互联互通与常见问题答疑
- 实战技巧、配置优化、常见运维命令集锦
二、Docker部署GitLab——私有化代码托管平台
1. 为什么要自建GitLab?
- 代码安全性:私有化部署可隔离外网访问,保障企业核心资产。
- 权限精细:支持丰富的团队、项目、分支、Webhook等权限与自动化。
- 可扩展性:集成CI、Issue、Wiki、代码评审等企业级功能。
2. 环境准备
- 推荐服务器配置:2核4G以上、50G+磁盘(项目多建议100G+)、建议64位Linux系统
- 安装好Docker(20.10及以上),配置国内镜像加速器更流畅
3. 拉取GitLab官方镜像
docker pull gitlab/gitlab-ce:latest
说明:
gitlab-ce
是开源社区版,满足绝大多数团队需求。
4. 创建持久化数据目录
建议数据、配置、日志与代码彻底分离,挂载宿主机目录,防止容器丢失数据。
mkdir -p /data/d/gitlabData/etc
mkdir -p /data/d/gitlabData/log
mkdir -p /data/d/gitlabData/data
/etc
:配置文件/log
:日志数据/data
:仓库存储区(项目代码、附件等)
目录可根据实际挂载到不同硬盘,实现热备、自动快照。
5. 启动GitLab容器
docker run --privileged=true --detach --restart always \--hostname gitlab.example.com \--publish 6001:80 --publish 6002:443 \--name gitlab \-v /data/d/gitlabData/etc:/etc/gitlab \-v /data/d/gitlabData/log:/var/log/gitlab \-v /data/d/gitlabData/data:/var/opt/gitlab \gitlab/gitlab-ce
关键参数说明
--hostname
:内网或外网主机名,建议用域名而非IP,后续集成更灵活--publish 6001:80
:宿主机6001端口映射GitLab Web服务80端口--publish 6002:443
:宿主机6002端口映射GitLab HTTPS端口(可选)--restart always
:宕机、重启自动恢复--privileged=true
:允许容器内使用更多权限-v ...
:数据、日志、配置挂载
6. 首次启动与访问
- 初次启动时间较长(10分钟左右,取决于服务器性能和网络)
- 访问
http://<服务器IP>:6001
,首访需设置root密码,进入后台 - 创建用户、组、项目后即可推送代码
7. 邮箱与https配置(可选)
- 修改
/data/d/gitlabData/etc/gitlab.rb
文件,设置SMTP参数,实现自动邮件通知 - 配置SSL证书,实现安全访问,避免token密码被劫持(建议生产环境务必开启)
8. 性能与备份建议
- 定期快照
/data/d/gitlabData
目录,避免误删/硬盘损坏丢失代码 - 并发高时适当调高服务器配置或分布式部署(可参考官方文档)
三、Docker部署Jenkins——CI/CD自动化引擎
1. Jenkins是什么?
- 全球最流行的开源自动化CI/CD平台
- 支持丰富插件、流水线、主从节点、脚本自动化
- 与GitLab/Gitee等代码平台原生无缝对接
2. 拉取Jenkins镜像
docker pull jenkins/jenkins:jdk17
推荐jdk17官方镜像,适配大部分现代Java项目。
3. 创建持久化目录与权限
mkdir -p /app/jenkins
chown -R 1000 /app/jenkins # Jenkins容器内用户通常为1000
该目录用于持久化流水线配置、插件、缓存等,保证重启/迁移不丢配置。
4. 启动Jenkins容器
docker run -d -p 8000:8080 --restart=always --name jenkins \-u root --privileged=true \-v /app/jenkins:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock \-v /usr/bin/docker:/usr/bin/docker \jenkins/jenkins:jdk17
参数详解
-p 8000:8080
:宿主机8000端口访问Jenkins web管理台-u root --privileged=true
:以root身份运行(方便流水线构建镜像等)-v /var/run/docker.sock:/var/run/docker.sock
:容器内Jenkins可调用宿主机Docker进行“构建、运行、删除镜像”-v /usr/bin/docker:/usr/bin/docker
:映射docker命令- 其它参数同上
5. 首次登录与初始化
- 访问
http://<服务器IP>:8000
- 输入初始化密码(在
/app/jenkins/secrets/initialAdminPassword
,可用cat
命令查看) - 安装推荐插件,创建管理员账号
- 配置JDK、Maven、Git(可用Docker内置或宿主机工具)
6. 集成GitLab
- 通过插件市场安装
GitLab Plugin
- 在“凭据管理”中添加GitLab访问token
- 新建流水线任务,选择Git SCM,填入仓库地址
- 可配置Webhook,让代码变更自动触发Jenkins构建
7. Maven项目构建配置
- 配置Maven(可用内置/自定义,建议宿主机提前装好并挂载)
- 典型构建命令:
clean install -Dmaven.test.skip=true
- 可在Jenkins Job的“构建”步骤里填写
四、Docker部署Nexus3——企业级制品仓库
1. Nexus3的作用
- 集中存储公司内部所有Maven、NPM、Docker等依赖
- 支持私有仓库(托管型)、代理远程(代理型)、分组聚合等多种模式
- 统一依赖管理,提升安全与稳定性
2. 拉取官方镜像
docker pull sonatype/nexus3
3. 创建数据目录并启动容器
mkdir -p /data/nexus3/
docker run -d -p 8002:8081 -p 8003:8003 -p 8004:8004 \-v /data/nexus3/:/nexus-data \--name nexus3 --privileged=true --restart=always sonatype/nexus3
端口说明
8002:8081
:Nexus Web控制台8003:8003
:Docker(hosted)私有仓库,可用于push/pull镜像8004:8004
:Docker(proxy)代理远程仓库,只能pull
目录说明
/nexus-data
:全部数据(仓库、配置、用户等)挂载到宿主机,易于备份与恢复
4. 首次访问与初始化
- 访问
http://<服务器IP>:8002
,初始用户admin
- 初始化密码在
/data/nexus3/admin.password
文件 - 登录后修改密码、配置仓库、用户权限
5. Docker私有仓库配置(高阶)
配置Docker客户端信任
- Nexus3默认使用HTTP(不安全),需要把服务端加入Docker客户端白名单,否则push/pull会报错
- 编辑
/etc/docker/daemon.json
:
{"insecure-registries": ["192.168.1.202:8003"]
}
- 重启docker服务
systemctl restart docker
仓库类型解释
- hosted:私有仓库(公司内部镜像存储与分发)
- proxy:代理仓库(缓存远程如Docker Hub的镜像,加速pull和避免网络波动影响)
- group:聚合hosted和proxy,推荐开发环境统一配置
典型Push镜像流程
docker tag my-app:latest 192.168.1.202:8003/my-app:latest
docker push 192.168.1.202:8003/my-app:latest
后续Jenkins可用此私有仓库自动推送、拉取镜像,支持版本回退。
五、三大平台互联互通与集成场景
1. 代码变更自动触发构建
- GitLab/Gitee项目配置WebHook,指向Jenkins Job
- Jenkins自动拉取最新代码,构建Java Jar包
- Jenkins构建并推送Docker镜像至Nexus3
- Jenkins调用脚本或API自动部署最新容器到生产/测试环境
2. 依赖统一管理
- 开发者在Maven配置文件中指定Nexus3地址
- 依赖全部走私有仓库,安全可控,防止外部依赖变更影响团队
- Nexus3自动缓存/代理第三方组件,提升稳定性与下载速度
3. 灰度发布与版本回滚
- Jenkins支持参数化构建,指定镜像Tag
- 发布失败时直接拉取上一个版本镜像恢复生产
六、常见问题与高阶技巧
1. 容器持久化与迁移
- 所有平台的数据目录均挂载到宿主机,定期快照/备份(可用rsync、定时tar压缩等)
- 容器迁移仅需在新服务器同步数据目录与Docker命令即可
2. SSL证书配置
- GitLab、Jenkins、Nexus3均可通过Nginx反向代理配置HTTPS
- 申请Let's Encrypt免费证书,增强数据安全性
3. 性能与安全优化
- 多用户并发、项目量大建议升级服务器配置,分离数据盘
- GitLab/Nexus/Jenkins均应配置强密码、定期修改管理员密码
- 生产环境建议关闭公网直接访问,仅开放必要端口,或通过堡垒机、VPN控制访问
4. 插件与生态
- Jenkins插件市场丰富,如集成飞书/钉钉通知、代码扫描、自动化测试等
- GitLab支持内置CI(可与Jenkins结合,推荐分步演进)
5. 典型运维命令速查
平台 | 场景 | 命令 |
GitLab | 查看状态 | docker logs -f gitlab |
GitLab | 停止 | docker stop gitlab |
GitLab | 备份 | rsync -av /data/d/gitlabData /backup/gitlab_$(date +%F) |
Jenkins | 重置密码 | 删除 |
Nexus3 | 查看密码 | cat /data/nexus3/admin.password |
Nexus3 | 备份 | rsync -av /data/nexus3 /backup/nexus_$(date +%F) |
七、总结与展望
本文系统梳理了如何用Docker在一台服务器(或多台分布式环境)下,快速部署并配置GitLab、Jenkins和Nexus3,为企业和团队搭建高效、安全、可扩展的DevOps平台提供了完整实践方案。无论你是想初步体验,还是追求生产级上线,这一套方法都能满足日常大部分需求。
核心优势包括:
- 环境一致,快速交付,随时扩展
- 数据、配置彻底持久化,易于备份与迁移
- 平台互联互通,自动化程度高,极大降低人力运维负担
- 支持灰度发布、自动回滚、权限管控和高并发扩展
随着业务增长,你还可以引入Kubernetes实现集群调度、引入Harbor替换Nexus专用Docker仓库、整合ELK监控、Prometheus报警等,让DevOps平台能力无限进化。
如有问题或需求,欢迎在评论区留言讨论!