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

配置 Docker 用于 GitHub 包

您可以配置 Docker 客户端以使用 GitHub 包注册表 发布和检索 docker 镜像。

GitHub 包注册表 可用于 GitHub Free、GitHub Pro、组织的 GitHub Free、GitHub Team、GitHub Enterprise Cloud 和 GitHub One。 GitHub 包注册表 不适用于使用旧版按仓库计划的帐户所拥有的私有仓库。 更多信息请参阅“GitHub 的产品”。

本文内容

注:安装或发布 Docker 映像时,GitHub 包注册表 当前不支持外部图层,如 Windows 映像。

向 GitHub 包注册表 验证

您需要访问令牌才能发布、安装和删除 GitHub 包注册表 中的包。 您可以使用个人访问令牌直接向 GitHub 包注册表 或 GitHub API 验证您的用户名。 您可以使用 GITHUB_TOKEN 以通过 GitHub 操作 工作流程进行身份验证。

使用个人访问令牌进行身份验证

您必须使用具有适当范围的个人访问令牌才可在 GitHub 包注册表 中发布和安装。 更多信息请参阅“关于 GitHub 包注册表”。

您可以使用 docker 登录命令,通过 Docker 向 GitHub 包注册表 验证。

为确保凭据安全,我们建议您将个人访问令牌保存在您计算机上的本地文件中,然后使用 Docker 的 --password-stdin 标志从本地文件读取您的令牌。

$ cat ~/TOKEN.txt | docker login https://docker.pkg.github.com -u USERNAME --password-stdin

要使用此示例登录命令,请将 USERNAME 替换为您的 GitHub 用户名,将 ~/TOKEN.txt 替换为您用于 GitHub 的个人访问令牌的文件路径。

更多信息请参阅“Docker 登录”。

使用 GITHUB_TOKEN 进行身份验证

如果您使用的是 GitHub 操作 工作流程,可以使用 GITHUB_TOKEN 发布和使用 GitHub 包注册表 中的软件包,而无需存储和管理个人访问令牌。 更多信息请参阅“使用 GITHUB_TOKEN 验证身份”。

发布包

GitHub 包注册表 支持每个仓库的多个顶层 Docker 镜像。 仓库可以拥有任意数量的映像标记。 在发布或安装大于 10GB 的 Docker 映像(每个图层上限为 5GB)时,可能会遇到服务降级的情况。 更多信息请参阅 Docker 文档中的“Docker 标记”。

由于不支持大写字母,因此,即使您的 GitHub 用户或组织名称中包含大写字母,也必须对仓库所有者使用小写字母。

在发布包后,您可以在 GitHub 上查看该包。 更多信息请参阅“查看包”。

  1. 使用 docker images 确定 docker 映像的名称和 ID。

    $ docker images
    > < >
    > REPOSITORY        TAG        IMAGE ID       CREATED      SIZE
    > IMAGE_NAME        VERSION    IMAGE_ID       4 weeks ago  1.11MB
  2. 使用 Docker 映像 ID 标记 docker 映像,将 OWNER 替换为拥有仓库的用户或组织帐户的名称,将 REPOSITORY 替换为包含项目的仓库的名称,将 IMAGE_NAME 替换为包或映像的名称,将 VERSION 替换为构建时的包版本。

    $ docker tag IMAGE_ID docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION
  3. 如果尚未为包构建 docker 映像,请构建映像,将 OWNER 替换为拥有仓库的用户或组织帐户的名称,将 REPOSITORY 替换为包含项目的仓库的名称,将 IMAGE_NAME 替换为包或映像的名称,将 VERSION 替换为构建时的包版本,将 PATH 替换为映像路径(如果映像未在当前工作目录中)。

    $ docker build -t docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION PATH
  4. 将映像发布到 GitHub 包注册表。

    $ docker push docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION

    注:必须使用 IMAGE_NAME:VERSION 推送映像,而不能使用 IMAGE_NAME:SHA

发布 Docker 映像的示例

您可以使用映像 ID 将 monalisa 映像的 1.0 版本发布到 octocat/octo-app 仓库。

$ docker images

> REPOSITORY           TAG      IMAGE ID      CREATED      SIZE
> monalisa             1.0      c75bebcdd211  4 weeks ago  1.11MB

# Tag the image with OWNER/REPO/IMAGE_NAME
$ docker tag c75bebcdd211 docker.pkg.github.com/octocat/octo-app/monalisa:1.0

# Push the image to GitHub 包注册表
$ docker push docker.pkg.github.com/octocat/octo-app/monalisa:1.0

您可能首次发布新的 Docker 映像并将其命名为 monalisa

# Build the image with docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION
# Assumes Dockerfile resides in the current working directory (.)
$ docker build -t docker.pkg.github.com/octocat/octo-app/monalisa:1.0 .

# Push the image to GitHub 包注册表
$ docker push docker.pkg.github.com/octocat/octo-app/monalisa:1.0

安装包

您可以使用 docker pull 命令从 GitHub 包注册表 安装 Docker 映像,将 OWNER 替换为拥有仓库的用户或组织帐户的名称,将 REPOSITORY 替换为包含项目的仓库的名称,将 IMAGE_NAME 替换为包或映像的名称,将 TAG_NAME 替换为要安装的映像的标记。 由于不支持大写字母,因此,即使您的 GitHub 用户或组织名称中包含大写字母,也必须对仓库所有者使用小写字母。

$ docker pull docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:TAG_NAME

注:必须使用 IMAGE_NAME:VERSION 推送映像,而不能使用 IMAGE_NAME:SHA

延伸阅读

问问别人

找不到要找的内容?

联系我们