2-5-利用阿里云FREE镜像仓库构建国外DOCKER镜像

熊 0 阅读 容器

在使用Kubernetes或是Docker过程中 , 遇到一些国外的镜像拉取不到的情况 , 在不能“科学上网“的前提下 , 可以巧妙的使用阿里云的FREE镜像仓库利用海外服务器重构建国外镜像 , 然后本机环境拉取即可。

操作大致为 , 现在Github上创建一个代码仓库 , 存放需要构建镜像的dockerfile文件 , 然后在阿里云镜像仓库里配置代码仓库远程使用海外服务器构建 , 结果成功就可以完成整个流程。

1. 创建Github代码仓库

Github页面点击“New“新建Repositories按钮 , 如下所示:

kubernetes-images-github-1

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

kubernetes-images-github-2

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

kubernetes-images-github-3

2. 远程上传文件到Github代码仓库

2.1.添加本机的SSH公钥到Github配置中

  1. 生成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回车 , 不做设置:

    kubernetes-images-github-4

    到~/.ssh/目录下去取生成的密钥对文件 ,

    $ ls ~/.ssh/
    id_rsa  id_rsa.pub
    ​
    $ cat id_rsa.pub
    ssh-rsa XXXXXXXXXXXXXXXXX………………= XXXXXX@XXXX.com

    cat命名查看 , 然后拷贝id_rsa.pub内容出来 , 为添加到gibhub配置中准备。

  2. 添加SSH公钥到Github配置

    转到Github网站 , 找到自己头像下标的setting按钮 , 如下图所示:

    kubernetes-images-github-5

    进入Settings页面 , 找到“SSH and GPG keys”按钮 , 如下所示:

    kubernetes-images-github-6

    添加新的SSH key , 如下按钮点击:

    kubernetes-images-github-7

    接着将公钥内容拷贝进去 , 如下示例:

    kubernetes-images-github-8

    然后点击“Add SSH key” , 提示输入Github账户密码即可完成。

    kubernetes-images-github-9

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”替换成自己仓库的地址 , 地址获取如下:

kubernetes-images-github-10

在本机该项目下创建目录层级以及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,或是绑定账号登陆 , 如下所示:

kubernetes-images-github-11

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

kubernetes-images-github-12

然后控制台会显示文件等传到了远端仓库的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上该项目 , 确认是否成功:

kubernetes-images-github-13

3. 阿里云镜像仓库配置

3.1.创建镜像仓库

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

kubernetes-images-github-14

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

kubernetes-images-github-15

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

kubernetes-images-github-16

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

kubernetes-images-github-17

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

kubernetes-images-github-18

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

kubernetes-images-github-19

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

kubernetes-images-github-20

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

kubernetes-images-github-21

3.2. 构建镜像

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

kubernetes-images-github-22

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

kubernetes-images-github-23

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

kubernetes-images-github-24

F12查看前台报错具体信息 , 可以看到:"Request body param is not correct. buildRule.dockerFileName is invalid. Format pattern [^<>/\\\|:"\*\?]+. Length is not greater than 64."

英文是“dockerFileName” , 对应界面的中文是“Dockerfile路径” , 这属于页面BUG。

重新输入如下:

kubernetes-images-github-25

点击“确定”不再报错。

然后点击立即构建 , 如下所示:

kubernetes-images-github-26

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

kubernetes-images-github-27

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

kubernetes-images-github-28

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

kubernetes-images-github-29
kubernetes-images-github-30

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


参考链接

史上最全操作教程——利用阿里云FREE镜像仓库构建国外DOCKER镜像_阿里云同步海外镜像-CSDN博客