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

左国才 脚本之家

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

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


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

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


当然这里我们也可以把ghcr.io 改为腾讯云镜像仓库,阿里云ACR,JFrog ARTIFACTORY, 自建Harbor等。好了,开始愉快的使用k8s吧。

©著作权归作者所有:来自51CTO博客作者mob604756f2af3b的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 《尚硅谷前端HTML5视频_微信小程序项目实战》视频教程免费下载
  2. 培训web前端开发无法胜任工作怎么办?
  3. 项目管理神书---PMP认证官方教材PMBOK
  4. 软件项目怎么快速响应用户需求
  5. 怎么区别项目 项目集 项目组合管理?
  6. 招投标IT项目怎么知道是否赚钱?
  7. Linux系统集群架构线上项目配置实战(一)
  8. Linux系统集群架构线上项目配置实战(三)
  9. Linux系统集群架构线上项目配置实战(二)

随机推荐

  1. 学习C的第三天-if语句
  2. Linux学习之常用的Linux文件内容查看命令
  3. 爬虫又报错了?用 Scrapy 来一发邮件不就好
  4. Python开发必知的6个基本库!
  5. Python常用的数据存储方式有哪些?五种!
  6. 前端要知道的Linux 的 RPM 和 YUM 包管理
  7. 一看就懂!通过英雄联盟锐雯详解 Python 设
  8. K8s 平台可以如何处理 Pod 预授权问题
  9. 学习C的第三天-while语句
  10. 一篇文章看明白 Android(安卓)Service 启