这是一个基于 Skopeo 的 Docker 镜像多架构同步工具,使用 Python 编写,支持将外部 Docker 镜像同步到 CNB 私有仓库,并自动处理多架构镜像。
. ├── main.py # 主程序入口 ├── skopeo_client.py # Skopeo 客户端封装类 ├── pyproject.toml # Python 项目配置 └── README.md # 项目说明文档
SkopeoClient 是核心的镜像同步客户端,封装了所有与 Skopeo 相关的操作:
工具依赖以下环境变量:
| 变量名 | 必需 | 说明 |
|---|---|---|
DOCKER_DELETE_CNB_TOKEN | 否 | 自定义 CNB Token,支持删除操作 |
CNB_TOKEN | 否 | 备用认证 Token(默认不支持删除操作) |
CNB_DOCKER_REGISTRY | 是 | CNB Docker 仓库地址 |
CNB_REPO_SLUG_LOWERCASE | 是 | 项目标识符 |
DOCKER_FULL_IMAGE | 是 | 要同步的源镜像地址 |
DOCKER_ARCHS | 否 | 要同步的架构列表(逗号分隔) |
DOCKER_ARCHS_MORE | 否 | 额外的架构列表(空格分隔) |
SKIP_ARCH_CHECK | 否 | 是否跳过架构检查(默认 true) |
# 设置环境变量
export DOCKER_FULL_IMAGE="nginx:1.21"
export CNB_DOCKER_REGISTRY="docker.cnb.cool"
export CNB_REPO_SLUG_LOWERCASE="my-project"
export CNB_TOKEN="your-token"
export DOCKER_ARCHS="linux/amd64,linux/arm64"
# 运行程序
python main.py
在 CNB 平台的项目页面,通过 Web 触发器配置环境变量并执行同步操作。
支持的架构格式:
linux/amd64 - 操作系统/架构linux/arm64/v8 - 操作系统/架构/变体amd64 - 仅架构(使用默认操作系统)工具执行以下步骤:
环境准备
DOCKER_ARCHS 和 DOCKER_ARCHS_MORE)初始化客户端
架构验证
SKIP_ARCH_CHECK 配置进行架构过滤或严格验证镜像解析
镜像复制
myimage:1.21-linux_amd64)等待推送完成
创建 Manifest
from skopeo_client import SkopeoClient
# 实例化客户端
client = SkopeoClient(
token="your-token",
registry="docker.cnb.cool",
username="cnb"
)
# 登录仓库
client.login()
# 获取镜像支持的架构
archs = client.get_img_platform_info("nginx:1.21")
print(f"支持的架构: {archs}")
# 按架构复制镜像
client.copy_image_by_archs(
source="nginx:1.21",
destination="docker.cnb.cool/my-project/nginx:1.21",
archs=["linux/amd64", "linux/arm64"]
)
# 创建并推送 manifest
client.create_and_push_manifest(
manifest_name="docker.cnb.cool/my-project/nginx:1.21",
imgs=[
"docker.cnb.cool/my-project/nginx:1.21-linux_amd64",
"docker.cnb.cool/my-project/nginx:1.21-linux_arm64"
]
)
获取镜像支持的架构: ['linux/amd64', 'linux/arm64', 'linux/arm/v7']
筛选后的架构: ['linux/amd64', 'linux/arm64']
镜像名称: nginx
镜像版本: 1.21
目标镜像: docker.cnb.cool/my-project/nginx:1.21
复制镜像中...
添加镜像:docker manifest create docker.cnb.cool/my-project/nginx:1.21 --amend docker.cnb.cool/my-project/nginx:1.21-linux_amd64 --amend docker.cnb.cool/my-project/nginx:1.21-linux_arm64
推送镜像:docker manifest push docker.cnb.cool/my-project/nginx:1.21
等待镜像推送完成...
工具包含完善的错误处理机制:
# Ubuntu/Debian
sudo apt-get install skopeo
# CentOS/RHEL
sudo yum install skopeo
# macOS
brew install skopeo
# Ubuntu/Debian
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# macOS
brew install --cask docker
pyproject.toml - Python 项目配置和依赖管理.cnb.yml - CNB 平台的 CI/CD 配置文件.cnb/web_trigger.yml - CNB 平台的 Web 触发器配置SKIP_ARCH_CHECK=true 时,只会同步源镜像支持的架构本项目采用 MIT 许可证。