Nexus 搭建私有 Docker 镜像仓库完全指南:从创建仓库到推送镜像
2026/8/12 10:20:13 网站建设 项目流程

引言

在掌握 Docker 基础使用,并且会推送镜像到公共仓库之后,团队内部通常需要搭建私有镜像仓库来存储和管理自己构建的镜像。Nexus 是一个流行的仓库管理工具,支持多种仓库类型,包括 Docker。本节课将详细讲解如何在 Nexus 中创建私有 Docker 仓库,并完成从登录到推送镜像的完整实操步骤。

核心内容

在 Nexus 中创建 Docker 私有镜像仓库

创建仓库步骤

进入 Nexus 管理界面的仓库管理页面,新建仓库,选择Docker hosted类型(用于存储我们自己推送的 Docker 镜像),命名仓库后选择之前创建好的 blob 存储,保留其余默认配置即可创建完成。

仓库信息

配置项
Namedocker-hosted
Formatdocker
Typehosted
URLhttp://157.230.22.19:8081/repository/docker-hosted/
权限配置

需要为访问该仓库创建专用角色:

  1. 新建角色NX Docker,添加docker-hosted仓库访问权限(普通用户使用View权限即可)。

  2. 将该角色赋予已有用户,完成权限配置。

Docker 仓库网络配置

配置 HTTP 连接器

Docker 客户端无法直接访问带路径的仓库 URL 端点(如http://IP:8081/repository/docker-hosted/),需要为 Docker 仓库单独分配一个独立端口。

由于本次使用 HTTP 非加密连接,需要勾选开启 HTTP 连接器,设置一个不同于 Nexus 主端口的独立端口(示例中使用8083),保存配置后,Nexus 服务器会开放该端口监听 Docker 客户端请求。

开放防火墙端口

需要在云服务器防火墙(示例中为 DigitalOcean Droplets 防火墙)中放开配置的 8083 端口,否则外部 Docker 客户端无法访问该仓库。

验证端口监听

可以通过netstat -lnpt命令验证端口是否正常监听:

root@ubuntu-s-4vcpu-8gb-fra-1-01:~# netstat -lnpt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:8083 0.0.0.0:* LISTEN 1639/java tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 1639/java

Nexus 服务端额外配置

启用 Docker Bearer Token Realm

Docker 登录后 Nexus 需要颁发认证令牌给客户端存储。默认该 Realm 是未激活状态,需要在Realms设置中激活Docker Bearer Token Realm后保存配置。

不激活该 Realm 会导致 Docker 登录失败,这是常见配置错误点。

Docker 客户端配置

配置不安全镜像仓库

Docker 客户端默认只允许连接 HTTPS 加密的镜像仓库,由于我们的 Nexus 使用 HTTP 连接,需要将仓库地址添加到不安全仓库白名单:

  • Linux 系统:直接编辑/etc/docker/daemon.json,添加insecure-registries配置项。

  • Docker Desktop(Mac/Windows):进入设置 → Docker Engine,添加配置后点击Apply & restart重启 Docker。

{ "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "experimental": false, "insecure-registries": ["157.230.22.19:8083"], "features": { "buildkit": true } }

登录并推送镜像

Docker 登录

重启 Docker 后执行docker login命令,传入仓库地址(IP+端口),输入分配了权限的 Nexus 用户名密码:

% docker login 157.230.22.19:8083 Username: nana Password: Login Succeeded

登录成功后,Docker 会在本地~/.docker/config.json保存认证令牌,后续操作无需重复登录。

推送镜像的正确步骤
  1. 本地构建镜像

    docker build -t my-app:1.0 .
  2. 重新打标签:将镜像标记为私有仓库地址格式,隐式指定推送目标。

    docker tag my-app:1.0 157.230.22.19:8083/my-app:1.0

    注意:标签格式错误(如多一个斜杠)会导致格式报错,正确格式为[仓库地址]/[镜像名]:[标签]

  3. 执行推送

    docker push 157.230.22.19:8083/my-app:1.0
推送结果验证

推送完成后进入 Nexus 的Browse界面,可以看到镜像的分层存储结构:

v2/ ├── blobs/ # 镜像层数据(sha256 哈希命名) └── my-app/ ├── manifests/ # 镜像元数据 └── tags/1.0 # 标签信息

Docker 镜像的每一层都会作为单独的资产存储,不同镜像可以复用相同层,这就是 Docker 分层存储的优势。

通过 Nexus API 查询镜像信息

可以通过 curl 调用 Nexus API 获取仓库中的镜像列表和元信息:

curl -u nana:password http://157.230.22.19:8081/service/rest/v1/search?repository=docker-hosted

返回结果为 JSON 格式,包含镜像 ID、名称、版本、资产信息、校验和等完整元数据。

总结

本节课完成了在 Nexus 中搭建私有 Docker 镜像仓库的完整流程:

  1. 创建仓库:选择Docker hosted类型,命名并配置 blob 存储。

  2. 权限配置:创建NX Docker角色,为仓库添加访问权限并赋予用户。

  3. 网络配置:为 Docker 仓库配置独立端口(如 8083),开放防火墙,验证端口监听。

  4. Realm 激活:启用Docker Bearer Token Realm以支持认证令牌颁发。

  5. 客户端配置:将 HTTP 仓库地址添加到 Docker 不安全仓库白名单,重启 Docker。

  6. 登录与推送:执行docker login,重新打标签(格式为[仓库地址]/[镜像名]:[标签]),执行docker push

  7. 验证:在 Nexus 界面查看镜像分层存储结构,或通过 API 查询元数据。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询