当前位置: 首页 > news >正文

基于Registry搭建docker加速镜像服务

背景

  • 场景:
    1. docker.io网络访问不通畅,服务器难以拉取镜像
    2. 多个服务器拉取相同镜像时,外网连接负载较重
  • 目的:
    1. 当存在能够访问docker.io的客户端时,可通过该客户端上传镜像至内网仓库,回避网络问题
    2. 通过搭建内网docker仓库,令服务器直接从内网拉取镜像,缓解外网负载
  • 条件:
    1. 能够获取Registry镜像
    2. 可选:具有Nginx服务,具有内网域名,具有内网域名对应的SSL证书

准备

  • 若具有Nginx服务,具有内网域名,具有内网域名对应的SSL证书,则可进一步优化使用方式:
    1. 在Nginx中新建转发服务,<自定义分配的url>指向<服务器端ip>:<Registry端口号>
    2. 配置对应的SSL
    3. 将签发该证书的CA证书添加至客户端/etc/docker/certs.d/<自定义分配的url>/ca.crt
  • 若不具有SSL证书且无法解决http安全问题,则在客户端修改/etc/docker/daemon.json,添加如下内容
{"insecure-registries": ["<服务器端ip>:<Registry端口号>"]
}
  • 重启docker

执行

  • 服务器端docker-compose.yml配置如下
version: '3'services:registry-docker:image: registry:2restart: unless-stoppedenvironment:REGISTRY_PROXY_REMOTEURL: https://registry-1.docker.io#REGISTRY_PROXY_USERNAME: <dockerhub username>#REGISTRY_PROXY_PASSWORD: <dockerhub password>REGISTRY_STORAGE_DELETE_ENABLED: "true"REGISTRY_HTTP_SECRET: "<通过openssl rand -hex 32生成的随机密钥>"# 每个客户端都需要认证才能访问#REGISTRY_AUTH: htpasswd#REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm#REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswdports:- 5000:5000volumes:- <Registry的数据目录>:/var/lib/registry#- <Registry的认证文件目录>:/auth  # 挂载认证文件
  • 备注:
    1. 如果认为该服务可能受到恶意攻击,可以启用Registry的认证配置
      1. 取消掉docker-compose.yml中关于认证的注释
      2. 服务器端需执行
        • docker run --rm --entrypoint htpasswd httpd:2 -Bbn <username> <password> >> /path/to/registry/auth/htpasswd
      3. 将客户端的认证文件添加至服务器端
      4. 客户端的docker在进行pull前,需要先进行登录:docker login <自定义分配的url>,输入账号密码
      5. 除非执行docker logout,否则会一直登录

测试

在客户端进行测试

# 拉取测试镜像并打标签
docker pull hello-world
docker tag hello-world <服务器ip>:<Registry端口>/my-hello-world# 尝试推送至服务器端的Registry
# 不进行Nginx转发时,执行这一行,会出现http安全问题
docker push <服务器ip>:<Registry端口>/my-hello-world
# 进行Nginx转发时,执行这一行
docker push <自定义分配的url>/my-hello-world# 删除本地镜像
docker rmi <服务器端ip>:<Registry端口号>/my-hello-world
docker rmi hello-world# 尝试从服务器端拉取镜像
# 不进行Nginx转发时,执行这一行
docker pull <服务器ip>:<Registry端口>/my-hello-world
# 进行Nginx转发时,执行这一行
docker pull <自定义分配的url>/my-hello-world

Registry的API

  • 查询镜像目录:curl -u <username>:<passwd> -X GET <自定义分配的url>/v2/_catalog
  • 查询指定镜像的版本:curl -u <username>:<passwd> -X GET <自定义分配的url>/v2/<image>/tags/list

参考

https://bitseqtech.com/archives/a12w1Mbg

http://www.jsqmd.com/news/8246/

相关文章:

  • mssql 无锁读取
  • 2025年四川大学计算机学院专硕考研经验分享
  • 基础数学拾遗
  • 【ROS2学习笔记】话题通信篇:话题通信项目实践——系统状态监测与可视化工具 - 实践
  • 详细介绍:CS50ai: week2 Uncertainty我的笔记B版——当 AI 开始“承认不确定”
  • 2025多校冲刺CSP模拟赛2(普通的颓唐)
  • 模板大全
  • springCloudMaven打包配置 - br
  • springCloud打包时根目录配置和公共包打包配置 - br
  • 2025.10.4 - 10.17
  • 题解:P5504 [JSOI2011] 柠檬
  • Thymeleaf教程
  • VMware虚拟机设置中处理器数量和内核内存再次探讨
  • VMware中Ubuntu迁移(复制)后进入紧急模式You are in emergency mode.
  • 2025年全国大学生电子设计竞赛A题:能量回馈的变流器负载试验装置(国一方案分享+代码工程+仿真) - 详解
  • 太简单了!原来PS在线抠图可以这么玩,背景分离无压力
  • 深入解析:【Leetcode】随笔
  • DateStyle日期时间字符串序列化 - br
  • 如何用AI工具编写一个轻量化CRM系统(七):AI生成pytest测试脚本
  • 实用指南:Linux驱动之V4L2
  • Embarcadero Dev-C++ 6.3 中文乱码问题 - 教程
  • 2025.10.4——2绿
  • 十月四日就听《10월 4일》
  • 深入解析:Java JVM --- JVM内存区域划分,类加载,GC垃圾回收
  • 比赛题2
  • 【微科普】蒙特卡洛(全网最好懂,附MATLAB算法):用 “撒芝麻” 的智慧破解复杂挑战 —— 从披萨面积到金融风险的诗意算法
  • ZR 2025 十一集训 Day 4
  • 价值处理单元(VPU)专题研究:从价值危机到透明决策的计算革命——声明Ai研究
  • 13-Neo4j Desktop
  • 中兴ZXHN F450光猫关闭TR069实录