使用 Github Codespace 同步镜像到国内镜像仓库
解决无法在国内从DockerHub中拉取镜像问题,下面的步骤只是同步一个镜像,可以根据自己需要自行拓展同步多个镜像或者使用GitHub Action自动同步镜像
个人亲测发现,使用 Github Codespace 要比使用国外的服务器速度更快
一、创建 github codespace
在GitHub上创建一个仓库,然后在如下图地方创建并进入 Codespace,会打开一个类似 VS Code 的代码编辑器

Codespaces 每个月使用会限制,限制每个月120核心小时数

二、(可选)在阿里云ACR创建镜像仓库
ACR(Alibaba Cloud Container Registry) 是阿里云提供的镜像仓库,类似 Harbor。
也可以选择使用自建Harbor或其他云厂商提供的容器镜像仓库服务,比如:
- 华为云的 SWR(SoftWare Repository for Container):比较推荐,目前不限制镜像数量,而且镜像的tag也可以比较好的保留,但是配置访问凭证相对较麻烦。
- 腾讯云的TCR(Tencent Container Registry):没用过。
如果不使用ACR就可以跳过这一步,直接看第3步。
https://cr.console.aliyun.com/cn-shanghai/instance/dashboard
开通ACR之后,创建命名空间

配置访问凭证,根据需要配置固定访问密码

可以先创建一个镜像仓库,进到镜像仓库之后可以看到一些操作步骤提示
ACR 当中的“镜像仓库”概念其实就是镜像,比如 redis:latest,那么镜像仓库就是
redis

三、同步镜像
https://github.com/containers/skopeo
二进制版:https://github.com/lework/skopeo-binary
在 Codespace 中安装 skopeo 并将 dockerhub 中的镜像推送到自建的镜像仓库或者ACR
由于 Codespce 是在公网,如果要同步到公司内部镜像仓库(无法通过公网访问的场景),可以考虑先在codespace同步到阿里云ACR/华为云SWR等云厂商的镜像仓库,再从阿里云ACR/华为云SWR同步到内网
# !!! 都是在Codespace中操作 !!!
# 下载 skopeo
version=v1.20.1
arch=amd64
[ -f /usr/bin/skopeo ] && mv /usr/bin/skopeo{,_src}
wget https://github.com/lework/skopeo-binary/releases/download/${version}/skopeo-linux-${arch} -O /usr/bin/skopeo
chmod +x /usr/bin/skopeo
# 创建 skopeo 所需配置文件
mkdir -p /etc/containers
tee > /etc/containers/policy.json <<-EOF
{
"default": [
{
"type": "insecureAcceptAnything"
}
],
"transports":
{
"docker-daemon":
{
"": [{"type":"insecureAcceptAnything"}]
}
}
}
EOF
# 登录镜像仓库,登录到自建的 harbor 或者上面创建的 ACR
skopeo login harbor.xxx.com
# 执行命令,将镜像push到自建的 harbor 或者上面创建的 ACR
skopeo copy docker://portainer/portainer-ce:2.20.3 docker://harbor.xxxxx.com/devops/portainer-ce:2.20.3

后续就可以直接从自建的 Harbor 或者 ACR 中拉取镜像了