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

推送和拉取 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 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 验证

如果要向 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 使用安全最佳实践。

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

    注:如果选择 write:packages 作用域,请在创建 PAT 时取消选择 repo 作用域。 将具有 repo 作用域的 PAT 添加为仓库中的机秘,可让仓库中的所有协作者访问该机密。 这会在操作中使用作用域为 repo 的 PAT 时授予不必要的额外访问权限。 有关操作安全最佳实践的更多信息,请参阅“GitHub Actions 的安全强化”。

    • 选择 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 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。