本文将探讨为什么最近国内Docker镜像源大规模失效,并提供一个临时解决方案,通过阿里云和GitHub同步镜像,确保Docker镜像的顺利拉取。本文适用于程序员和技术爱好者,希望能帮助大家解决当前的问题。
前言
在2024年6月初,国内Docker镜像源突然大规模失效,包括网易和阿里等几乎所有的镜像源都无法使用。这给广大开发者带来了巨大的不便。本文将详细介绍一个临时解决方案,利用阿里云和GitHub同步Docker镜像,从而保证镜像的顺利拉取。
准备工作
注册阿里云和GitHub账号
作为程序员,拥有阿里云和GitHub账号是基本要求。这里不再赘述注册过程。
阿里云开通容器镜像服务
- 登录阿里云:进入容器镜像服务界面。
- 使用个人版(免费):创建命名空间(免费版可以创建3个)。
- 设置访问凭证:点击访问凭证,设置固定密码。记录好用户名、固定密码和对应的阿里云注册中心地址。
GitHub设置
- 安装GitHub CLI工具:下载并安装GitHub CLI工具(例如:gh_2.51.0_linux_amd64.deb)。
- 登录GitHub CLI:执行以下命令进行登录操作。
$ gh auth login ? What account do you want to log into? GitHub.com ? What is your preferred protocol for Git operations on this host? SSH ? Upload your SSH public key to your GitHub account? /home/xxx/.ssh/id_rsa.pub ? Title for your SSH key: GitHub CLI ? How would you like to authenticate GitHub CLI? Paste an authentication token
根据提示,选择GitHub.com,并使用Paste an authentication token模式进行认证。
创建Secrets
- Fork仓库:从WeiyiGeek/action-sync-images Fork一个新仓库,然后git clone到本地。
- 生成命名secret:进入项目目录,执行以下命令生成一个命名secret。
gh secret set DOCKER_USERNAME
- 生成其他secrets:类似的再生成
DOCKER_PASSWORD
和DOCKER_REGISTRY
两个secrets,它们的值分别为之前记录下的阿里云中对应的值。
配置GitHub Action脚本
进入.github/worflows
目录,修改文件sync-images-dockerHub-example.yml
,内容如下:
# 工作流名称
name: Sync-Images-to-DockerHub-Example
# 工作流运行时显示名称
run-name: ${{ github.actor }} is Sync Images to DockerHub.
# 怎样触发工作流
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# 工作流程任务(通常含有一个或多个步骤)
jobs:
syncimages:
runs-on: ubuntu-latest
steps:
- name: Checkout Repos
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: ${{ secrets.DOCKER_REGISTRY }}
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
logout: false
- name: Use Skopeo Tools Sync Image to Docker Hub
run: |
#!/usr/bin/env bash
skopeo copy docker://源docker镜像地址:版本号 \
docker://registry.cn-hangzhou.aliyuncs.com/命名空间/镜像名称:版本号
修改上述文件中的 源docker镜像地址:版本号
和 命名空间/镜像名称:版本号
,然后提交到 GitHub,等待1-2分钟,你就可以在阿里云的镜像仓库里看到刚刚拉取的镜像了。
本地拉取镜像
在本地可以直接拉取阿里云镜像仓库的镜像:
$ docker pull registry.cn-hangzhou.aliyuncs.com/xxx/elasticsearch:8.12.2
8.12.2: Pulling from xxx/elasticsearch
43c43af79300: Pull complete
45d2cdef02ae: Pull complete
53c867456b94: Pull complete
4ca545ee6d5d: Pull complete
5a5296f0a516: Pull complete
6c446de718e0: Pull complete
b1e261305ffa: Pull complete
fb4da479c6c6: Pull complete
95d1bfc165a8: Pull complete
49e262de4e33: Pull complete
Digest: sha256:002b27154428905c74083a4af2e068a01fe15128abb6e50f063054a1df03a01a
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/xxx/elasticsearch:8.12.2
registry.cn-hangzhou.aliyuncs.com/xxx/elasticsearch:8.12.2
修改镜像标签
使用tag
命令修改一下镜像标签:
$ docker tag registry.cn-hangzhou.aliyuncs.com/xxx/elasticsearch:8.12.2 elasticsearch:8.12.2 \
&& docker rmi registry.cn-hangzhou.aliyuncs.com/xxx/elasticsearch:8.12.2
至此完成了Docker镜像的下载和标签修改。
结论
在当前国内Docker镜像源大规模失效的情况下,通过阿里云和GitHub同步镜像是一个有效的临时解决方案。希望本文的步骤和技巧能够帮助广大开发者顺利拉取Docker镜像,继续他们的开发工作。