2-5-利用阿里云FREE镜像仓库构建国外DOCKER镜像
在使用Kubernetes或是Docker过程中 , 遇到一些国外的镜像拉取不到的情况 , 在不能“科学上网“的前提下 , 可以巧妙的使用阿里云的FREE镜像仓库利用海外服务器重构建国外镜像 , 然后本机环境拉取即可。
操作大致为 , 现在Github上创建一个代码仓库 , 存放需要构建镜像的dockerfile文件 , 然后在阿里云镜像仓库里配置代码仓库远程使用海外服务器构建 , 结果成功就可以完成整个流程。
1. 创建Github代码仓库
Github页面点击“New“新建Repositories按钮 , 如下所示:

下一步 , 填写仓库的名字 , 以及描述信息(选填) , 以及添加README文件(选填) , 为了良好的阅读 , 建议选填的也认真填写。如下所示:

创建成功 , 可以进入到该代码仓库下 , 如下图所示 :

2. 远程上传文件到Github代码仓库
2.1.添加本机的SSH公钥到Github配置中
生成
SSH密钥对首先确认一下本机是否已经生成
SSH密钥对 , 有的话可以直接拷贝添加 , 没有的话需要 , 先生成 , 如下所示:$ ll ~/.ssh ls: cannot access '/c/Users/XXXX/.ssh': No such file or directory如上显示没有 , 则生成
SSH密钥对 , 操作如下所示 , 将“email@address”替换成自己配置的邮箱地址:$ ssh-keygen -t rsa -C "email@address"返回如下所示 , 过程中提示保存密钥的文件 , 以及设置密码等 , 可以直接
Enter回车 , 不做设置:
到~/.ssh/目录下去取生成的密钥对文件 ,
$ ls ~/.ssh/ id_rsa id_rsa.pub $ cat id_rsa.pub ssh-rsa XXXXXXXXXXXXXXXXX………………= XXXXXX@XXXX.comcat命名查看 , 然后拷贝id_rsa.pub内容出来 , 为添加到gibhub配置中准备。添加SSH公钥到Github配置
转到
Github网站 , 找到自己头像下标的setting按钮 , 如下图所示:
进入
Settings页面 , 找到“SSH and GPG keys”按钮 , 如下所示:
添加新的
SSH key, 如下按钮点击:
接着将公钥内容拷贝进去 , 如下示例:

然后点击“
Add SSH key” , 提示输入Github账户密码即可完成。
2.2 上传本机代码到远程Github仓库
首先将远程仓库的项目克隆到本机
$ git clone https://github.com/Jensen-Lone/kubernetes-images.git
Cloning into 'kubernetes-images'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.如上仓库地址“https://github.com/Jensen-Lone/kubernetes-images.git”替换成自己仓库的地址 , 地址获取如下:

在本机该项目下创建目录层级以及dockerfile文件 , 层级结构 , 以及dockerfile文件内容如下所示:
$ tree
.
|-- README.md
`-- metrics-server
`-- v0.5.0
`-- dockerfile
2 directories, 2 files
$ cat metrics-server/v0.5.0/dockerfile
From k8s.gcr.io/metrics-server/metrics-server:v0.5.0如上可以看到dockerfile内容就是负责将目标镜像作为底层镜像拉取一下 , 不做任何其他操作。
接下来操作推送到远端仓库 :
$ git config --global user.email "xxxxxx@xx.com"
$ git config --global user.name "xxxxx"
$ git add .
warning: LF will be replaced by CRLF in metrics-server/v0.5.0/dockerfile.
The file will have its original line endings in your working directory
$ git commit -m "metric-server-v0.5.0"
[main 99ebc0c] metric-server-v0.5.0
1 file changed, 1 insertion(+)
create mode 100644 metrics-server/v0.5.0/dockerfile然后输入“git push -u origin main” , 选择将代码推送到远端仓库的main分支 , 会提示输入token,或是绑定账号登陆 , 如下所示:

本示例选择第一种授权绑定账号登陆方式,成功后浏览器如下提示:

然后控制台会显示文件等传到了远端仓库的main分支 , 如下所示:
$ git push -u origin main
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 420 bytes | 210.00 KiB/s, done.
Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/Jensen-Lone/kubernetes-images.git
eff4862..99ebc0c main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.然后查看Github上该项目 , 确认是否成功:

3. 阿里云镜像仓库配置
3.1.创建镜像仓库
首先登陆到阿里云页面 , 接入方式“产品”—>“容器与中间件”—>“容器镜像服务ACR” , 如下图所示 :

进入容器镜像服务ACR , 选择“管理控制台”按钮 , 如下图所示 :

进入如下页面 , 可以看到之前创建过的镜像仓库 , 本示例再创建一个仓库作为示范 , 点击“创建镜像仓库”按钮 , 如下图所示:

填写相关信息 , 命名空间(没有的需要创建) , 仓库名称 , 摘要等信息 , 如下所示:

下一步 , 到如下所示 , 需要配置代码源 , 本示例已经绑定了Github账号 , 没有绑定的话 , 点击“绑定账号”即可 , 如下所示:

选择自己代码仓库的命名空间 , 以及项目 , 如下所示:

勾选海外机器构建 , 如下所示:

创建镜像仓库后 , 可以查看到成功创建的仓库 , 如下所示:

3.2. 构建镜像
选中该仓库 , 进入 , 在构建页面中点击“添加规则” , 如下所示:

添加规则 , 如下填写 , 选择分支main , 填写目录 , dockerfile文件名 , 以及版本号:

注释: 在2022.03.24上午创建新的仓库添加新规则时候 , 由于界面更新 , 填的内容略有不同 , 报错“请求部分参数不正确” , 但是界面不友好 , 没有具体指名哪一个框体内部填写报错。

F12查看前台报错具体信息 , 可以看到:"Request body param is not correct. buildRule.dockerFileName is invalid. Format pattern [^<>/\\\|:"\*\?]+. Length is not greater than 64."
英文是“dockerFileName” , 对应界面的中文是“Dockerfile路径” , 这属于页面BUG。
重新输入如下:

点击“确定”不再报错。
然后点击立即构建 , 如下所示:

查看到正在构建 , 如下所示:

也可以查看构建日志 , 如下所示:

如下成功 , 拷贝镜像的公网地址 , 留作测试使用 , 如下所示:


3.3.镜像拉取验证
在Docker环境的机器上 , 测试拉取上面构建的镜像 , 操作如下所示:
$ docker pull registry.cn-hangzhou.aliyuncs.com/jensenlone/metric-server-test:v0.5.0
Trying to pull repository registry.cn-hangzhou.aliyuncs.com/jensenlone/metric-server-test ...
v0.5.0: Pulling from registry.cn-hangzhou.aliyuncs.com/jensenlone/metric-server-test
5dea5ec2316d: Already exists
2ca785997557: Pull complete
Digest: sha256:c15b9e9866c1da99dcfc92eed7741dcb688ae64f3184e8ec05be6be819ccdb7a
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/jensenlone/metric-server-test:v0.5.0
$ docker images | grep metric
registry.cn-hangzhou.aliyuncs.com/jensenlone/metric-server-test v0.5.0 1c655933b9c5 2 months ago 63.5 MB参考链接