使用容器注册表

您可以在使用包命名空间 https://ghcr.io 的 Container registry 中存储和管理 Docker 和 OCI 映像。

GitHub Packages 可用于 GitHub Free、GitHub Pro、组织的 GitHub Free、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server 和 GitHub AE。


GitHub Packages 不适用于使用旧版按仓库计划的帐户所拥有的私有仓库。 此外,使用旧版按仓库计划的帐户无法访问 Container registry,因为这些帐户是按仓库计费的。 更多信息请参阅“[GitHub 的产品](/articles/github-s-products)”。

关于 Container registry 支持

要推送和拉取容器映像,组织管理员或个人帐户所有者必须启用 Container registry。 更多信息请参阅“使用 Container registry 启用改进的容器支持”。

安装或发布 Docker 映像时,容器注册表支持外部层,例如 Windows 映像。

Container registry 目前支持以下容器映像格式:

向 Container registry 验证

PAT 可以授予对您的帐户的广泛访问权限。 在创建 PAT 以向 Container registry 验证时,您应该只选择必要的 read:packageswrite:packagesdelete:packages 范围。

要在 GitHub Actions 工作流程中向 Container registry 验证,请使用 GITHUB_TOKEN 以获得最佳的安全性和体验。

有关更新使用个人访问令牌向 ghcr.io 验证的工作流程的指南,请参阅“升级访问 ghcr.io 的工作流程”。

如果要在测试期间的操作中使用 Container registry,请遵循我们在“GitHub Actions 的安全强化”中的 PAT 使用安全最佳实践。

  1. 针对要完成的任务,新创具有适当作用域的个人访问令牌 (PAT)。 如果您的组织需要 SSO,则必须为新令牌启用 SSO。

    注意: 默认情况下, 当您在用户界面中选择 write:packages 范围的个人访问令牌 (PAT) 时,repo 范围也将被选中。 repo 范围提供了不必要和广泛的访问权限,我们建议您尤其避免使用 GitHub Actions 工作流程。 更多信息请参阅“GitHub Actions 的安全性增强”。 作为一种解决方法,您可以在以下 URL 的用户界面中为 PAT 选择 write:packages 范围:https://github.com/settings/tokens/new?scopes=write:packages

    • 选择 read:packs 作用域以下载容器映像并读取其元数据。
    • 选择 write:packages 作用域以下载和上传容器映像并读取和写入其元数据。
    • 选择 delete:packages 作用域以删除容器映像。

    更多信息请参阅“创建用于命令行的个人访问令牌。”

  2. 保存您的 PAT。 我们建议将 PAT 保存为环境变量。

    $ export CR_PAT=YOUR_TOKEN
  3. 使用您的容器类型的 CLI 登录到 ghcr.io 上的 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 值指定要拉取的准确容器映像版本。

  1. 要查找摘要 SHA 值,请使用 docker inspectdocker pull,并复制 Digest: 后的 SHA 值

    $ docker inspect ghcr.io/OWNER/IMAGE_NAME
  2. 按需要在本地删除映像。

    $ docker rmi  ghcr.io/OWNER/IMAGE_NAME:latest
  3. 拉取图像名称后有 @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 .

标记容器映像

  1. 找到要标记的 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
  2. 使用映像 ID 以及所需的映像名称和托管目标标记 Docker 映像。

    $ docker tag 38f737a91f39 ghcr.io/OWNER/NEW_IMAGE_NAME:latest

此文档对您有帮助吗?隐私政策

帮助我们创建出色的文档!

所有 GitHub 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。