阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

解决访问难题:使用Nexus 3搭建自己的Docker镜像代理加速服务

560次阅读
没有评论

共计 4247 个字符,预计需要花费 11 分钟才能阅读完成。




本站提供 Linux 服务器运维,自动化脚本编写等服务,如有需要请联系博主微信:xiaozme

近期,传言许多公开的 Docker 镜像加速地址由于神秘因素影响纷纷下线,停止对外服务。在此之前官方 Docker 镜像源在国内也受到屏蔽,使得从国内环境拉取 Docker 镜像变得异常困难。现在,建立自己的 Docker 镜像代理显得尤为重要。本文将详细介绍如何使用 Nexus 3 搭建 Docker 镜像代理。文章内容较多专业知识,主要面向运维或开发人员,对新手小白用户可能不太友好。

47dfe7ab8ab8639b.png

关于 Nexus 3

Nexus 3 是一个强大的包管理和仓库工具,由 Sonatype 开发。它支持多种包格式,包括 Maven, Docker, npm, NuGet 等,适用于软件开发中的依赖管理和仓库托管。以下是一些关于 Nexus 3 的主要特点:

  • 多种格式支持:Nexus 3 可以管理多种格式的二进制文件,包括 Java 的 jar 和 war 文件,JavaScript 的 npm 包,Python 的 PyPi 包等。
  • 代理和托管仓库:Nexus 3 允许用户创建代理仓库,可以缓存远程仓库中的组件,也可以创建托管仓库用于存储内部生成的组件。
  • 安全性和权限管理:提供细粒度的权限控制,支持与外部用户管理系统(如 LDAP)的集成,确保仓库的安全访问。
  • 高可用性和支持大规模部署:Nexus 3 支持高可用性部署配置,能够处理大量的请求和存储大量的组件,适合大规模企业环境。
  • 仓库健康检查和优化:提供仓库健康检查工具和数据优化工具,帮助维护仓库的稳定性和效率。
  • 界面和集成:提供了一个用户友好的界面,方便用户管理仓库和组件。同时,Nexus 3 可以与持续集成 / 持续部署 (CI/CD) 工具如 Jenkins、Bamboo 等集成,优化开发流程。

Nexus 3 是开发和 DevOps 团队在构建和维护软件项目中不可或缺的工具之一,特别是在处理多种依赖和需要确保依赖安全性的场景下。

前提准备

  • 一台国外 VPS,内存最好在 4GB 以上
  • 服务器已经安装了 Docker 服务
  • 已经安装 Nginx
  • 一个域名,并申请 SSL 证书

之所以选择使用国外 VPS 是因为官方 Docker 镜像源在国内受到屏蔽,导致国内服务器无法正常访问这些镜像。因此,需要借助国外 VPS 来进行代理中转,以确保可以顺利拉取所需的 Docker 镜像。

使用场景

接下来,xiaoz 通过我个人使用场景来详细说明这一过程。

  • 使用 Nexus 3 搭建 Docker 镜像代理
  • 配置 Nexus 3 Docker 镜像代理
  • 镜像代理允许匿名 PULL 操作,但不允许 PUSH 操作
  • 为了安全性考虑,避免过多用户使用,导致资源耗尽,我仅对自己的镜像helloz(我的 Docker 官方用户名)进行代理和缓存,其余镜像一律不允许拉取

使用 Docker Compose 安装 Nexus 3

新建一个 docker-compose.yaml 文件,内容如下:

version: "3.8"
services:
 nexus:
   image: sonatype/nexus3
   container_name: nexus
   ports:
     - "8081:8081"
   volumes:
     - ./data:/nexus-data
   restart: always
  • ./data是 Nexus 3 持久化存储数据目录,建议改成主机的绝对路径,容器内部路径 /nexus-data 不要修改。

然后使用命令 docker-compose up -d 启动 Nexus 3 容器,首次启动需要进行初始化操作,过长稍微较长,可能需要等待几分钟才能完全启动。

配置 Nexus 3

启动完毕后,输入 http://IP:8081 访问 Nexus 3,然后点右上角进行登录,用户名为 admin,密码需要通过查看挂载目录下的admin.password 获得。

137cffcef57090ab.png

根据引导修改管理员密码。

856386691d1ac016.png

这里我选择启用匿名访问。

efa13775bc2df4ff.png

通过 Nexus 3 设置 Docker 镜像代理

打开“设置 >> Security >> Roles >> Create Role

5db475d4b2057a8e.png

然后按照如下填写:

  • Role ID:填写DockerPullAnonymous(也可以自己修改 ID)
  • Role Name:DockerPullAnonymous(可自行修改)
  • Applied Privileges
    • nx-repository-view-docker-*-browse
    • nx-repository-view-docker-*-read
    • nx-repository-view-docker-docker-browse
    • nx-repository-view-docker-docker-read
  • Applied Roles:nx-anonymous

如下截图:

3799b66af3402962.png

继续打开“设置 >> Security >> Users”,找到 Anonymous User 这个用户进行编辑,并添加 DockerPullAnonymous 这个权限。

f86732998a8d735d.png

继续打开“设置 >> Security >> Realms”, 添加 Docker Bearer Token Realm 这个权限并保存。

e48aaed59c8323d8.png

上述操作步骤的目的是添加 Docker 匿名 PULL 权限,如果不配置,拉取镜像的时候会提示:Error response from daemon: unauthorized: authentication required

继续打开“设置 >> Routing Rules”,添加一条新规则:

  • Name:Allow_helloz(名字可以自己取)
  • Mode:Allow
  • Matchers:^/v2/helloz/.*(这里我仅配置允许拉取 helloz 这个用户的镜像,多个用户可以写^/v2/(helloz|user2|user3)/.*

ce9d38c1679e60ae.png

这个步骤的目的是防止匿名用户拉取所有的 Docker 镜像,所以我这里只配置允许拉取我自己 helloz 的镜像(helloz是 Docker 官方注册的用户名)。

打开“设置 >> Repositories >> Create repository”我们开始创建一个 Docker 镜像仓库。

77573247631b22e4.png

然后选择docker(proxy)

6931f5e839c29141.png

注意下方红框标注的地方(Remote storage 填写https://registry-1.docker.io)。

6a109566d552904e.png

Routing Rule 选择之前添加的Allow_helloz, 其它保持默认即可。

911af2c01ced50b1.png

设置 Nginx 反向代理

执行 docker pull 操作时,Docker 官方要求目标镜像地址必须是 HTTPS 链接。为了满足这一要求,我们可以通过配置 Nginx 作为反向代理来连接 Nexus 3,并通过域名设置镜像地址以支持 HTTPS 访问。具体的 Nginx 配置如下所示:

server {
    listen 80;
    server_name hub.xxx.com; # 填写你自己的域名

    rewrite ^(.*) https://hub.xxx.com$1 permanent;
}
server {
    listen 443 ssl http2;

    server_name hub.xxx.com; # 填写你自己的域名

    ssl_certificate /data/ssl/hub.xxx.com.crt; # 改成你自己的 SSL 证书
    ssl_certificate_key /data/ssl/hub.xxx.com.key; # 改成你自己的 SSL 私钥
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    # intermediate configuration
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;

    location / {
          client_max_body_size  64m;
          proxy_http_version 1.1;
          proxy_pass http://IP:8081/repository/docker/;  # 改成你自己在 Nexus 3 上 Docker 的镜像地址
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $remote_addr;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_connect_timeout 60s;
            proxy_send_timeout 60s;
            proxy_read_timeout 300s;
            send_timeout 60s;

            proxy_buffers 16 32k;
            proxy_buffer_size 64k;

            proxy_set_header Connection "";
   }
}

测试

接下来在国内服务器使用命令 docker pull hub.xxx.com/helloz/onenav:0.9.33 拉取镜像测试,可以成功拉取,说明配置成功了。

10f5e0bc3a32948c.png

继续使用命令 docker pull hub.xxx.com/baiyuetribe/zdir:latest 尝试拉取一个非 helloz 用户的镜像,提示没有权限,符合我们的预期情况。

180974dc82ff7443.png

结语

在本文中,我们详细探讨了如何使用 Nexus 3 搭建 Docker 镜像代理。值得注意的是,每个人的使用场景都有所不同,但 Nexus 3 的灵活性允许用户根据自己的具体需求配置不同的规则,实现精细化的权限控制。这一功能不仅使 Nexus 3 成为管理 Docker 镜像的理想选择,同时也适用于 npm、maven 等其他类型的包管理。

最后,感谢 ChatGPT 指导我完成 Nexus 3 的权限设置和协助我排查其中遇到的错误!

如需付费搭建Nexus 3,请联系我微信:xiaozme

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计4247字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7968827
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛 NAS-4:飞牛 NAS 安装 istore 旁路由,家庭网络升级的最佳实践 开始 大家好我是...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
CSDN,你是老太太喝粥——无齿下流!

CSDN,你是老太太喝粥——无齿下流!

CSDN,你是老太太喝粥——无齿下流! 大家好,我是星哥,今天才思枯竭,不写技术文章了!来吐槽一下 CSDN。...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...