如何用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 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吧。
更多相关文章
- 《尚硅谷前端HTML5视频_微信小程序项目实战》视频教程免费下载
- 培训web前端开发无法胜任工作怎么办?
- 项目管理神书---PMP认证官方教材PMBOK
- 软件项目怎么快速响应用户需求
- 怎么区别项目 项目集 项目组合管理?
- 招投标IT项目怎么知道是否赚钱?
- Linux系统集群架构线上项目配置实战(一)
- Linux系统集群架构线上项目配置实战(三)
- Linux系统集群架构线上项目配置实战(二)