解决无法在国内从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 中拉取镜像了