一、引言
在当今软件开发领域,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 | 重置密码 | 删除/app/jenkins/users 后重启容器重设 |
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平台能力无限进化。
如有问题或需求,欢迎在评论区留言讨论,或关注我的优快云博客与公众号,一起深入交流DevOps、自动化运维与低代码实践!