侧边栏壁纸
博主头像
痕迹 博主等级

行动起来,活在当下

  • 累计撰写 35 篇文章
  • 累计创建 9 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

同步dockerhub镜像仓库

阿杜
2025-07-23 / 0 评论 / 0 点赞 / 5 阅读 / 0 字

同步dockerhub镜像仓库

摘自:https://github.com/sqing33/docker-image-sync-to-registry

  1. 克隆仓库
git clone https://github.com/sqing33/docker-image-sync-to-registry.git
cd docker-image-sync-to-registry
  1. 配置环境:
  • 编辑docker-compose.yml文件,设置必要的环境变量
  • 配置daemon.json文件,设置Registry地址和镜像加速
  1. 启动服务
docker-compose up -d

配置说明

  1. docker-compose.yml配置
services:
  image-sync:
    image: sqing33/docker-image-sync-to-registry # ghcr.io/sqing33/docker-image-sync-to-registry
    container_name: docker-image-sync-to-registry
    privileged: true
    environment:
      - REGISTRY_URL=http://registry:5000 # 镜像仓库地址
      - CRON_SCHEDULE=0 4 * * * # 每天凌晨4点执行
      - SYNC_ON_START=true # 容器启动时立即同步
      - TARGET_ARCH=linux/amd64 # 目标架构(linux/amd64,linux/arm64)
      - REMOVE_LIBRARY_PREFIX_ON_LOCAL=true # 是否移除本地镜像的library/前缀
      - MAX_PAGES_PER_CATEGORY=1 # 控制 Python 脚本爬取的页数
      - CRAWL_AFTER_CUSTOM_IMAGES=true # 拉取custom_images镜像列表之后是否继续爬取DockerHub
      - HTTP_PROXY=http://192.168.1.100:7890
      - HTTPS_PROXY=http://192.168.1.100:7890
      - NO_PROXY=localhost,127.0.0.1,docker.1panel.live,docker.1ms.run,http://registry:5000
    volumes:
      - /etc/timezone:/etc/timezone:ro # 容器时区同步宿主机
      - /etc/localtime:/etc/localtime:ro # 容器时间同步宿主机
      - /vol1/1000/Docker/docker-image-sync-to-registry/daemon.json:/etc/docker/daemon.json # 设置容器Docker加速源
      - /vol3/1000/Docker镜像仓库/docker缓存:/var/lib/docker/overlay2 # 挂载容器Docker下载镜像的目录
      - /vol1/1000/Docker/docker-image-sync-to-registry/custom_images.txt:/app/custom_images.txt:ro # 自定义镜像列表文件

附带部署 registry 的示例:

version: "3"

services:
  registry:
    image: registry:2 # ghcr.io/sqing33/registry
    container_name: registry
    restart: always
    ports:
      - 1500:5000
    volumes:
      - /vol3/1000/Docker镜像仓库:/var/lib/registry
    environment:
      - REGISTRY_STORAGE_DELETE_ENABLED=true # 启用删除功能
    networks:
      - registry

  registry-ui:
    image: quiq/registry-ui # ghcr.io/sqing33/registry-ui
    container_name: registry-ui
    restart: always
    volumes:
      - /vol1/1000/Docker/registry/config.yml:/opt/config.yml:ro
    ports:
      - 1501:8000
    networks:
      - registry

  docker-image-sync:
    image: sqing33/docker-image-sync-to-registry # ghcr.io/sqing33/docker-image-sync-to-registry
    container_name: docker-image-sync-to-registry
    privileged: true
    environment:
      - REGISTRY_URL=http://registry:5000 # 镜像仓库地址
      - CRON_SCHEDULE=0 4 * * * # 每天凌晨4点执行
      - SYNC_ON_START=true # 容器启动时立即同步
      - TARGET_ARCH=linux/amd64 # 目标架构(linux/amd64,linux/arm64)
      - REMOVE_LIBRARY_PREFIX_ON_LOCAL=true # 是否移除本地镜像的library/前缀
      - MAX_PAGES_PER_CATEGORY=1 # 控制 Python 脚本爬取的页数
      - CRAWL_AFTER_CUSTOM_IMAGES=true # 拉取custom_images镜像列表之后是否继续爬取DockerHub
      - HTTP_PROXY=http://192.168.1.100:7890
      - HTTPS_PROXY=http://192.168.1.100:7890
      - NO_PROXY=localhost,127.0.0.1,docker.1panel.live,docker.1ms.run,http://registry:5000
    volumes:
      - /etc/timezone:/etc/timezone:ro # 容器时区同步宿主机
      - /etc/localtime:/etc/localtime:ro # 容器时间同步宿主机
      - /vol1/1000/Docker/docker-image-sync-to-registry/daemon.json:/etc/docker/daemon.json # 设置容器Docker加速源
      - /vol3/1000/Docker镜像仓库/docker缓存:/var/lib/docker/overlay2 # 挂载容器Docker下载镜像的目录
      - /vol1/1000/Docker/docker-image-sync-to-registry/custom_images.txt:/app/custom_images.txt:ro # 自定义镜像列表文件
    networks:
      - registry

networks:
  registry:
    name: registry
  1. Daemon.json配置
{
  "registry-mirrors": ["https://docker.1panel.live", "https://docker.1ms.run"],
  "insecure-registries": ["[镜像仓库地址]"]
}
  1. 参数信息

image-20250723141525667

  1. 挂载卷说明

image-20250723141618213

项目结构

.
├── Dockerfile              # Docker 镜像构建文件
├── docker-compose.yml      # Docker Compose 配置文件
├── daemon.json            # Docker daemon 配置文件
├── config.yml             # Registry UI 配置文件
├── docker_hub_crawler.py  # Docker Hub 爬虫脚本
└── sync_images.sh         # 镜像同步脚本

工作原理

  1. 爬虫模块(docker_hub_crawler.py):
    • 爬取 Docker Hub 上的镜像分类
    • 提取镜像名称和标签信息
    • 支持分页获取和去重处理
  2. 同步模块(sync_images.sh):
    • 读取 custom_images.txt 中的镜像列表
    • 读取爬虫生成的镜像列表
    • 使用 docker pull 拉取镜像
    • 使用 docker tag 重命名镜像
    • 使用 docker push 推送到私有仓库

查看日志:

# 查看容器日志
docker logs docker-image-sync-to-registry

# 查看同步脚本日志
docker exec docker-image-sync-to-registry cat /var/log/sync_images.log
0

评论区