Docker Hub 仓库国内无法拉取镜像,如何应对?
描述:早上起来发现交流群中有童鞋在说无法在Docker Hub中正常拉取镜像,然后在公司的服务器上拉取最新的nginx:latest
镜像发现确实无法拉取。
注册一个阿里云账户
由于前面作者发布过两篇同步国外镜像的技巧,这里融合一下,于是想使用Github Action + Skopeo 工具优雅的同步Docker Hub到阿里云个人镜像仓库中,在从阿里云个人镜像仓库中拉取到公司的私有仓库中不就临时解决此问题了嘛。
如何使用Github Action优雅的同步国外镜像到DockerHub或私有仓库
如何使用Aliyun容器镜像服务对海外gcr、quay仓库镜像进行镜像拉取构建?
简单的说,就是利用Github-Action同步国外镜像到指定的个人Docker hub镜像仓库以及企业在互联网里的私有仓库中。
遂,撸起袖子(拿起键盘⌨)开始动手操作,前提 阿里云账号、Github 账号。
首先,你需要注册一个阿里云账户(没有的情况下),然后访问 https://help.aliyun.com/zh/acr/?source=5176.11533457&userCode=uelj47qf 进行ACR服务订阅,之后点击阿里云控制台,点击左侧的容器镜像服务
,进入后点击镜像仓库
,如下图所示
注册容器镜像服务图
点击个人实例
,自行创建命名空间,此处作者创建的的是weiyigeek
,虽然名称可以自定义但是不可以与已存在的命名空间重复,如下图所示
创建命名空间图
点击访问凭证
,建议设置固定的凭证(PS:固定密码没有时效限制,请注意妥善保管,如果遗失,可以通过再次设置重置固定密码)
$ sudo docker login --username=阿里云账号名称 registry.cn-hangzhou.aliyuncs.com
设置固定访问密码图
然后,在Github中创建账户以及仓库,此处作者创建的仓库名为images-sysncer
,并在目录下创建一个.github/workflows 目录用于存放Github Action 镜像拉取同步脚本,如下图所示
示例仓库:https://github.com/WeiyiGeek/action-sync-images
之后,创建一个sync-image-example.yml
其内容,如下所示:
name: Sync Image to Aliyun Exampleon: push: branches: [ "main" ] pull_request: branches: [ "main" ]jobs: build: runs-on: ubuntu-latest steps: - name: Git pull uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2.9.1 - name: Login to Docker Hub uses: docker/login-action@v2.2.0 with: registry: registry.cn-hangzhou.aliyuncs.com username: 阿里云账号 password: 固定访问密码 logout: false - name: Use Skopeo Tools Sync Image to Docker Hub run: | skopeo copy docker://docker.io/hslr/sun-panel:1.4.0 docker://registry.cn-hangzhou.aliyuncs.com/weiyigeek/sun-panel:1.4.0 # 使用 skopeo 工具将镜像同步到阿里云个人仓库中,使用时请自行源和目标修改仓库名称和镜像名称
提交更改,便会触发 Github Action 执行此脚本,点击 action
,执行完成后。
最后,我们到阿里云控制台中查看到从docker hub中拉取sun-panel镜像已经成功同步到阿里云ACR仓库中了,并且可以正常的进行拉取到我们内部容器环境中,如下图所示。
从阿里云acr中拉取镜像图
至此,使用 Github Action + Skopeo
工具优雅的同步Docker Hub到阿里云个人镜像仓库中实践完毕,希望大大多多支持!