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

简介: 在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的命令行使用。

13.png


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文件,这样逻辑就更清楚了,这个镜像是某个项目的制品或者某个项目要用到这个镜像。

参考文档:

  1. https://github.com/features/packages
  2. 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: 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


14.png


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

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


15.png


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

本文作者:左国才,VIPKID运维工程师,笔名icai,主要研究Linux操作系统,数据库,云计算,DevSecOps 领域相关技术, 热爱开源技术,平时喜欢阅读、写作、分享。

声明:本文为 脚本之家专栏作者 投稿,未经允许请勿转载。

相关实践学习
通过ACR快速部署网站应用
本次实验任务是在云上基于ECS部署Docker环境,制作网站镜像并上传至ACR镜像仓库,通过容器镜像运行网站应用,网站运行在Docker容器中、网站业务数据存储在Mariadb数据库中、网站文件数据存储在服务器ECS云盘中,通过公网地址进行访问。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
721 6
|
8月前
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
514 16
|
8月前
|
Ubuntu 网络安全 PHP
如何使用vscode的Docker插件管理ubuntu 拉取服务器的镜像以及创建容器
本测试镜像旨在记录使用vscode的Docker插件拉取病创建Dockerfile,以及拉取镜像。
|
11月前
|
关系型数据库 MySQL Docker
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
678 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
存储 数据库 Docker
正确删除容器和镜像的方式
【10月更文挑战第24天】本文介绍了在Docker中如何正确删除容器和镜像,包括停止容器、删除已停止容器、删除未被使用的镜像以及注意事项,如数据备份、依赖关系检查和权限问题。其他容器管理工具的操作类似,但命令和语法可能不同。
3624 4
|
Shell Linux Docker
docker常用命令大全(基础、镜像、容器、数据卷)
这些命令仅仅是 Docker 命令行工具的冰山一角,但对于日常操作来说已经非常全面。通过熟练地使用这些基础命令,用户可以有效地管理 Docker 的镜像、容器、数据卷和网络。随着用户对 Docker 的深入使用,更高级的命令和选项将会变得必需,但上面列出的命令已经为用户提供了一个坚实的起点。对于初学者来说,理解和掌握这些常用命令是深入学习 Docker 的基础。
1053 5
docker常用命令大全(基础、镜像、容器、数据卷)
|
Kubernetes 监控 Java
如何在Kubernetes中配置镜像和容器的定期垃圾回收
如何在Kubernetes中配置镜像和容器的定期垃圾回收
|
存储 安全 Ubuntu
Docker 镜像与 Docker 容器的区别
【8月更文挑战第27天】
1675 5
|
运维 Ubuntu Shell
掌握Docker容器的创建:从镜像到实例
【8月更文挑战第27天】
2968 4