我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们

推送和拉取 Docker 映像

您可以在 GitHub Container Registry 中存储和管理 Docker 映像。

GitHub Packages 可用于 GitHub Free、GitHub Pro、组织的 GitHub Free,GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server 2.22、GitHub One 及 GitHub AE。


GitHub Packages 不适用于使用旧版按仓库计划的帐户所拥有的私有仓库。 GitHub Packages 可用于 GitHub Free、GitHub Pro、组织的 GitHub Free、GitHub Team、GitHub Enterprise Cloud 和 GitHub One。 更多信息请参阅“[GitHub 的产品](/articles/github-s-products)”。

本文内容

注:GitHub Container Registry 目前处于公测阶段,可能会更改。 在测试阶段,存储和带宽是免费的。 要使用 GitHub Container Registry,您必须启用功能预览。 更多信息请参阅“关于 GitHub Container Registry”和“启用改进的容器支持”。

要推送和拉取组织拥有的容器映像,组织管理员必须为组织启用 GitHub Container Registry。 更多信息请参阅“启用改进的容器支持”。

向 GitHub Container Registry 验证

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

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

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

GitHub Container Registry 现在支持 GITHUB_TOKEN 在您的工作流中进行简单和安全的认证。 如果您的工作流程使用个人访问令牌 (PAT) 向 ghcr.io 验证,我们强烈建议您更新工作流程以使用 GITHUB_TOKEN

有关 GITHUB_TOKEN 的更多信息,请参阅“加密密钥”和“工作流程中的身份验证”。

如果要在测试期间的操作中使用 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 上的 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 值指定要拉取的准确容器映像版本。

  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

此文档对您有帮助吗?

Privacy policy

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

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

做出贡献

或, 了解如何参与。