在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-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 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
当Actions 流程跑完以后,我们就可以在Github Packages看到刚才从谷歌拉取的镜像。这样我们再在项目里拉取镜像的时候就可以直接从Github拉取了。
docker pull ghcr.io/zuoguocai/ingress-nginx/controller:v0.3
当然这里我们也可以把ghcr.io 改为腾讯云镜像仓库,阿里云ACR,JFrog ARTIFACTORY, 自建Harbor等。好了,开始愉快的使用k8s吧。
本文作者:左国才,VIPKID运维工程师,笔名icai,主要研究Linux操作系统,数据库,云计算,DevSecOps 领域相关技术, 热爱开源技术,平时喜欢阅读、写作、分享。
声明:本文为 脚本之家专栏作者 投稿,未经允许请勿转载。