如何用Github轻松拉取谷歌容器镜像

如何用Github轻松拉取谷歌容器镜像

左国才 脚本之家

如何用Github轻松拉取谷歌容器镜像

作者 | 左国才
出品 | 脚本之家(ID:jb51net)

在k8s的深度实践中,我们有时需要拉取谷歌容器镜像,域名诸如gcr.io,k8s.gcr.io。但是由于网络的一些限制和成本的一些考量,做起来比较棘手。
国内的一些镜像加速,往往并不能提供持续的免费服务或者同步镜像的版本比较旧。
本文以拉取 k8s nginx ingress controller (https://github.com/kubernetes/ingress-nginx)容器镜像为例,来谈谈如何借助Github Actions + Github容器镜像服务来拉取谷歌镜像。

如何用Github轻松拉取谷歌容器镜像

在Github生成Github Packages Registry访问token

在Github 个人主页里点击 Settings--- Developer settings---Personal access tokens---New personal access token 并勾选write:packages,read:packages,delete:packages 来让这个token具有Pacakgs 管理权限,当然也包括ghcr.io 的容器镜像管理权限。记录下token,以便在repository的 secret和docker login的命令行使用。
如何用Github轻松拉取谷歌容器镜像
Github推出的容器镜像服务,域名为ghcr.io(Github Container Registry),仓库的命名空间就是github的用户名, 在Github个人主页里的Packages即可看到所有上传的docker镜像列表。也就是说通过命令行docker push ghcr.io/zuoguocai/镜像名,最终可以在Github主页的Packages里浏览,但这个Packages 不仅仅局限于docker制品,可以是npm,Maven 等,具体可以参考官方文档。

命令行操作ghcr.io如下:


echo <personal access token> | docker login ghcr.io --username zuoguocai --password-stdin
docker tag app ghcr.io/zuoguocai/app:1.0.0
docker push ghcr.io/zuoguocai/app:1.0.0

默认上传到Packages后的镜像是私有的,仅个人能看到和下载。可以通过 Package Settings--Make public 来设置为公共,就可以免密码拉取了。
还可以把上传的image关联到代码项目的readme文件,这样逻辑就更清楚了,这个镜像是某个项目的制品或者某个项目要用到这个镜像。
参考文档:

https://github.com/features/packages
https://docs.github.com/en/packages/getting-started-with-github-container-registry/about-github-container-registry

如何用Github轻松拉取谷歌容器镜像

Github Action 拉取镜像并上传

新建一个repository,在项目里通过 Settings--Secrets--New secret 把01中生成的personal access token 存放到环境变量GHCRIOTOKEN,以便在 Actions的pipeline文件里引用。

在这个项目的Actions里 配置.github/workflow/main.yaml文件 ,Actions workflow 会在Github 动态生成的Ubuntu构建环境中,拉取谷歌镜像,并上传至Github镜像仓库。

main.yaml 文件如下:


name: GitGoogleContainer
on:
  push:
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      # - uses: actions/checkout@v2
      - name: Login in Docker Registry
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GHCR_IO_TOKEN }}
      - name: Docker pull and push
        run: |
          docker pull k8s.gcr.io/ingress-nginx/controller:v0.35.0  
          docker tag  k8s.gcr.io/ingress-nginx/controller:v0.35.0  ghcr.io/zuoguocai/ingress-nginx/controller:v0.35.0       
          docker push ghcr.io/zuoguocai/ingress-nginx/controller:v0.35.0

如何用Github轻松拉取谷歌容器镜像
当Actions 流程跑完以后,我们就可以在Github Packages看到刚才从谷歌拉取的镜像。这样我们再在项目里拉取镜像的时候就可以直接从Github拉取了。


docker pull ghcr.io/zuoguocai/ingress-nginx/controller:v0.35.0

如何用Github轻松拉取谷歌容器镜像
当然这里我们也可以把ghcr.io 改为腾讯云镜像仓库,阿里云ACR,JFrog ARTIFACTORY, 自建Harbor等。好了,开始愉快的使用k8s吧。

猜你喜欢

转载自blog.51cto.com/15127579/2671321
今日推荐