注:GitHub Container Registry 目前处于公测阶段,可能会更改。 在测试阶段,存储和带宽是免费的。 To use GitHub Container Registry, you must enable the feature preview. For more information, see "About GitHub Container Registry" and "Enabling improved container support."
要推送和拉取组织拥有的容器映像,组织管理员必须为组织启用 GitHub Container Registry。 更多信息请参阅“启用改进的容器支持”。
向 GitHub Container Registry 验证
如果要向
GitHub Actions 工作流程中的 GitHub Container Registry 验证,则您必须使用个人访问令牌 (PAT)。 GITHUB_TOKEN
目前没有所需的权限。 在 GitHub Container Registry 测试阶段,唯一支持的身份验证形式是 PAT 。
PAT 可以授予对您的帐户的广泛访问权限。 在创建 PAT 以向 container registry 验证时,我们建议只选择必要的读取、写入或删除 package
作用域。 避免在 GitHub Actions 工作流程使用的 PAT 中包括 repo
作用域,因为它会授予不必要的额外访问权限。
如果要在测试期间的操作中使用 container registry,请遵循我们在“GitHub Actions 的安全强化”中的 PAT 使用安全最佳实践。
-
针对要完成的任务,新创具有适当作用域的个人访问令牌 (PAT)。 如果您的组织需要 SSO,则必须为新令牌启用 SSO。
注:如果选择
write:packages
作用域,请在创建 PAT 时取消选择repo
作用域。 将具有repo
作用域的 PAT 添加为仓库中的机秘,可让仓库中的所有协作者访问该机密。 这会在操作中使用作用域为repo
的 PAT 时授予不必要的额外访问权限。 有关操作安全最佳实践的更多信息,请参阅“GitHub Actions 的安全强化”。- 选择
read:packs
作用域以下载容器映像并读取其元数据。 - 选择
write:packages
作用域以下载和上传容器映像并读取和写入其元数据。 - 选择
delete:packages
作用域以删除容器映像。
更多信息请参阅“创建用于命令行的个人访问令牌。”
- 选择
-
保存您的 PAT。 我们建议将 PAT 保存为环境变量。
$ export CR_PAT=YOUR_TOKEN
-
使用您的容器类型的 CLI 登录到
ghcr.io
上的 GitHub Container Registry 服务。$ echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin > Login Succeeded
推送容器映像
此示例推送最新版本的 IMAGE-NAME
。
$ docker push ghcr.io/OWNER/IMAGE_NAME:latest
此示例推送 2.5
版的映像。
$ docker push ghcr.io/OWNER/IMAGE-NAME:2.5
首次发布包时,默认可见性是私有的。 要更改可见性或设置访问权限,请参阅“配置容器映像的访问控制和可见性”。
拉取容器映像
通过摘要拉取
为了确保始终使用相同的映像,您可以通过 digest
SHA 值指定要拉取的准确容器映像版本。
-
要查找摘要 SHA 值,请使用
docker inspect
或docker pull
,并复制Digest:
后的 SHA 值$ docker inspect ghcr.io/OWNER/IMAGE_NAME
-
按需要在本地删除映像。
$ docker rmi ghcr.io/OWNER/IMAGE_NAME:latest
-
拉取图像名称后有
@YOUR_SHA_VALUE
的容器映像。$ docker pull ghcr.io/OWNER/IMAGE_NAME@sha256:82jf9a84u29hiasldj289498uhois8498hjs29hkuhs
按名称拉取
$ docker pull ghcr.io/OWNER/IMAGE_NAME
按名称和版本拉取
显示按名称和 1.14.1
版本标记拉取映像的 Docker CLI 示例:
$ docker pull ghcr.io/OWNER/IMAGE_NAME:1.14.1
> 5e35bd43cf78: Pull complete
> 0c48c2209aab: Pull complete
> fd45dd1aad5a: Pull complete
> db6eb50c2d36: Pull complete
> Digest: sha256:ae3b135f133155b3824d8b1f62959ff8a72e9cf9e884d88db7895d8544010d8e
> Status: Downloaded newer image for ghcr.io/orgname/image-name/release:1.14.1
> ghcr.io/orgname/image-name/release:1.14.1
按名称和最新版本拉取
$ docker pull ghcr.io/OWNER/IMAGE_NAME:latest
> latest: Pulling from user/image-name
> Digest: sha256:b3d3e366b55f9a54599220198b3db5da8f53592acbbb7dc7e4e9878762fc5344
> Status: Downloaded newer image for ghcr.io/user/image-name:latest
> ghcr.io/user/image-name:latest
构建容器映像
此示例构建 hello_docker
映像:
$ docker build -t hello_docker .
标记容器映像
-
找到要标记的 Docker 映像的 ID。
$ docker images > REPOSITORY TAG IMAGE ID CREATED SIZE > ghcr.io/my-org/hello_docker latest 38f737a91f39 47 hours ago 91.7MB > ghcr.io/my-username/hello_docker latest 38f737a91f39 47 hours ago 91.7MB > hello-world latest fce289e99eb9 16 months ago 1.84kB
-
使用映像 ID 以及所需的映像名称和托管目标标记 Docker 映像。
$ docker tag 38f737a91f39 ghcr.io/OWNER/NEW_IMAGE_NAME:latest