1. Github Container Registry
9 月 1 日,GitHub 宣布 Github Container Registry 開始公測,測試期間提供免費、無限容量的 Docker 鏡像倉庫服務。
再也不用擔心,docker.io 一言不合清理鏡像了。真好真香!
GitHub 正在以托管代碼倉庫為切入點,逐步覆蓋整個研發工具鏈,打造一站式 DevOps 平臺。項目管理有 Issues 、Projects,包管理有 Packages,CI 有 Actions,知識管理有 Wiki ,覆蓋面越來越廣。
接下來應該就是 CD 部分了,提供容器托管服務是個不錯的選擇。@GitHub
2. 推送第一個鏡像
下面我們來試試推送一個鏡像。
2.1 創建登陸 Token
直接使用 GitHub 的賬戶密碼推送鏡像會提示錯誤:
unauthorized: Your token has not been granted the required scopes to execute this query. The 'id' field requires one of the following scopes: ['read:packages'], but your token has only been granted the: [''] scopes. Please modify your token's scopes at: https://github.com/settings/tokens.
Github Container registry 需要使用 https://github.com/settings/tokens/new 頁面創建的 Token 作為密碼才可以推送鏡像。
打開上面的鏈接,勾選 write:packages 和 read:packages ,repo 會自動選中,創建 Token。
下面以 XXX 代指這里的 Token 值。
2.2 鏡像推送
- 登陸
echo "XXX" | docker login ghcr.io -u shaowenchen --password-stdin
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
- 新建 Tag
查看鏡像列表
docker images
MySQL 8.0.11 5dbe5b6313e1 2 years ago 445MB
新建 Tag
docker tag 5dbe5b6313e1 ghcr.io/shaowenchen/mysql
- 推送
docker push ghcr.io/shaowenchen/mysql
The push refers to repository [ghcr.io/shaowenchen/mysql]
ae2d2cded00e: ...
latest: digest: sha256:d98a807f255bd60cd7807af6a11f94cd2456a2908a12adb3737088473c1625a2 size: 2828
這樣就完成了鏡像的推送。但是鏡像并不是每個人都可以 pull ,下面接著來看下鏡像的可見性管理。
2.3 可見性管理
推送完成鏡像之后,在個人的主頁 packages 標簽頁下面,可以看到鏡像列表。
默認推送的鏡像是 Private ,只有授權的賬戶才可以 pull 。而 Public 鏡像可以匿名 pull ,沒有限制。
- Private
在 Private 鏡像的 Packages settings 頁面,可以將 Private 鏡像改為 Public ,還可以進行授權的管理 Manage Access。
- Public
需要注意的是在 Public 鏡像的 Packages settings 頁面,無法修改鏡像的可見性,只能刪除鏡像。
3. 與 docker.pkg.github.com 的區別
ghcr.io 與 docker.pkg.github.com 類似,都是提供鏡像倉庫服務,使用一樣的鑒權方式。但是也有些不同:
- 維度不同
ghcr.io 針對的是賬戶維度,是以賬戶為基本對象提供的服務。而 docker.pkg.github.com 針對的是倉庫維度,是以倉庫為基本對象提供的服務。
- 管理粒度不同
docker.pkg.github.com 中的鏡像不允許直接刪除,只能通過刪除倉庫的方式,關聯刪除鏡像。
而在 ghcr.io 中,可以直接完全管理鏡像。
- 鏡像格式不同
對比一下兩者的鏡像格式:
docker.pkg.github.com/OWNER/REPOSITORY/IMAGE-NAME
ghcr.io/OWNER/IMAGE-NAME
docker.pkg.github.com 鏡像格式形如 docker.pkg.github.com/shaowenchen/pipeline-test/mysql ,在名字中會帶上倉庫名。而 ghcr.io 提供的 ghcr.io/shaowenchen/mysql 與其他鏡像倉庫的命名規范更加一致。
4. 參考
- https://docs.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages/
- https://github.blog/2020-09-01-introducing-github-container-registry/
作者: Shaowen Chen
鏈接: https://www.chenshaowen.com/blog/github-container-registry.html