全面实战:Docker环境下部署GitLab、Jenkins与Nexus3,打造企业级DevOps基座

一、引言

在当今软件开发领域,DevOps已成为敏捷团队、高效交付不可或缺的技术基石。**代码托管(GitLab)、持续集成(Jenkins)、私有制品仓库(Nexus3)**是企业搭建DevOps流水线的“铁三角”。如果用传统方式分别在不同服务器手动部署和维护这些服务,不仅繁琐,还容易出错、环境不可控。

幸运的是,Docker容器化技术让这些复杂的基础设施部署变得前所未有的简单、高效、标准化。本文将从0到1,手把手带你用Docker部署GitLab、Jenkins、Nexus3,实现企业级DevOps平台底座的“1小时交付”!

文章结构如下:

  1. Docker部署GitLab:打造安全、高可用的代码仓库

  2. Docker部署Jenkins:自动化CI/CD流水线引擎

  3. Docker部署Nexus3:私有Maven/Docker仓库统一管理依赖

  4. 互联互通与常见问题答疑

  5. 实战技巧、配置优化、常见运维命令集锦


二、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. 首次登录与初始化

  1. 访问 http://<服务器IP>:8000

  2. 输入初始化密码(在 /app/jenkins/secrets/initialAdminPassword,可用cat命令查看)

  3. 安装推荐插件,创建管理员账号

  4. 配置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. 首次访问与初始化

  1. 访问 http://<服务器IP>:8002,初始用户admin

  2. 初始化密码在 /data/nexus3/admin.password 文件

  3. 登录后修改密码、配置仓库、用户权限

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、自动化运维与低代码实践!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙武低代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值