当前位置: 首页 > 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.hskmm.com/?act=detail&tid=24273

相关文章:

  • mssql 无锁读取
  • 2025年四川大学计算机学院专硕考研经验分享
  • 基础数学拾遗
  • 2025多校冲刺CSP模拟赛2(普通的颓唐)
  • 模板大全
  • springCloudMaven打包配置 - br
  • springCloud打包时根目录配置和公共包打包配置 - br
  • 2025.10.4 - 10.17
  • 题解:P5504 [JSOI2011] 柠檬
  • Thymeleaf教程
  • Vmware虚拟机设置中处理器数量和内核内存再次探讨
  • VMware中Ubuntu迁移(复制)后进入紧急模式You are in emergency mode.
  • 太简单了!原来PS在线抠图可以这么玩,背景分离无压力
  • 深入解析:【Leetcode】随笔
  • 实用指南:Linux驱动之V4L2
  • 儿童与青少年数据安全及体育发展新方向会议
  • 威联通NAS Emby-Server 的SQLite数据库损坏和程序损坏修复
  • Embarcadero Dev-C++ 6.3 中文乱码问题 - 教程
  • 2025.10.4——2绿
  • 十月四日就听《10월 4일》
  • windows上的实用小软件
  • 比赛题2
  • ZR 2025 十一集训 Day 4
  • 价值处理单元(VPU)专题研究:从价值危机到透明决策的计算革命——声明Ai研究
  • 13-Neo4j Desktop
  • 中兴ZXHN F450光猫关闭TR069实录
  • 完整教程:六款智能证照工具盘点,打造个性化“数字身份档案”
  • 随机化学习笔记
  • PWN手的从成长之路-08-not_the_same_3dsctf_2016-溢出+函数调用劫持
  • 12-windows11的WSL详解