这是一个用于将 Docker Hub 上的镜像同步到私有 Docker Registry 的工具,基于 docker:dind 镜像修改构建。通过 Python 脚本爬取 Docker Hub 上的镜像分类,生成镜像列表,并同步到私有 Registry。
git clone https://github.com/sqing33/docker-image-sync-to-registry.git
cd docker-image-sync-to-registry
配置环境:
docker-compose.yml 文件,设置必要的环境变量daemon.json 文件,设置 Registry 地址和镜像加速启动服务:
docker-compose up -d
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 # 自定义镜像列表文件
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
{
"registry-mirrors": ["https://docker.1panel.live", "https://docker.1ms.run"],
"insecure-registries": ["[镜像仓库地址]"]
}
| 参数名 | 说明 | 默认值 | 是否必填 |
|---|---|---|---|
| REGISTRY_URL | 镜像仓库地址 | - | 是 |
| CRON_SCHEDULE | 定时同步的 cron 表达式 | 0 4 * * * | 是 |
| SYNC_ON_START | 容器启动时是否立即同步 | true | 是 |
| TARGET_ARCH | 目标架构(linux/amd64,linux/arm64) | linux/amd64 | 是 |
| REMOVE_LIBRARY_PREFIX_ON_LOCAL | 是否移除本地镜像的 library/ 前缀 | false | 是 |
| MAX_PAGES_PER_CATEGORY | 控制 Python 脚本爬取的页数 | 5 | 是 |
| CRAWL_AFTER_CUSTOM_IMAGES | 拉取 custom_images 镜像列表之后是否继续爬取 DockerHub | true | 是 |
| HTTP_PROXY | HTTP 代理地址 | - | 否 |
| HTTPS_PROXY | HTTPS 代理地址 | - | 否 |
| NO_PROXY | 不使用代理的地址列表 | localhost,127.0.0.1 | 否 |
| 挂载路径 | 说明 | 是否必填 |
|---|---|---|
| /etc/timezone | 容器时区同步宿主机 | 是 |
| /etc/localtime | 容器时间同步宿主机 | 是 |
| /etc/docker/daemon.json | 设置容器 Docker 加速源 | 是 |
| /var/lib/docker/overlay2 | 挂载容器 Docker 下载镜像的目录 | 否 |
| /app/custom_images.txt | 自定义镜像列表文件 | 否 |
.
├── Dockerfile # Docker 镜像构建文件
├── docker-compose.yml # Docker Compose 配置文件
├── daemon.json # Docker daemon 配置文件
├── config.yml # Registry UI 配置文件
├── docker_hub_crawler.py # Docker Hub 爬虫脚本
└── sync_images.sh # 镜像同步脚本
爬虫模块(docker_hub_crawler.py):
同步模块(sync_images.sh):
同步失败检查项:
查看日志:
# 查看容器日志
docker logs docker-image-sync-to-registry
# 查看同步脚本日志
docker exec docker-image-sync-to-registry cat /var/log/sync_images.log
Content type
Image
Digest
sha256:3d939f71b…
Size
158.7 MB
Last updated
over 1 year ago
docker pull sqing33/docker-image-sync-to-registry