Skip to main content

使用 Docker 注册表

您可以使用 GitHub Packages Docker 注册表推送和拉取您的 Docker 映像。

注意: GitHub Packages 目前正在测试用于 GitHub AE。

关于 Docker 支持

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

向 GitHub Packages 验证

需要访问令牌才能发布、安装和删除包。

可使用个人访问令牌 (PAT) 向 GitHub Packages 或 GitHub AE API 进行身份验证。 创建个人访问令牌时,可根据需要为令牌分配不同的作用域。 有关 PAT 的包相关范围的详细信息,请参阅“关于 GitHub Packages 的权限”。

要在 GitHub Actions 工作流程内向 GitHub Packages 注册表验证,您可以使用:

  • GITHUB_TOKEN 发布与工作流存储库相关联的包。
  • PAT 来安装与其他专用存储库(GITHUB_TOKEN 无法访问)相关联的包。

有关 GitHub Actions 工作流中使用的 GITHUB_TOKEN 的详细信息,请参阅“工作流中的身份验证”。

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

您必须使用具有适当范围的个人访问令牌才可在 GitHub Packages 中发布和安装。 有关详细信息,请参阅“关于 GitHub Packages”。

可以使用 docker 登录命令,通过 Docker 向 GitHub Packages 验证。

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

$ cat ~/TOKEN.txt | docker login docker.HOSTNAME -u USERNAME --password-stdin

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

有关详细信息,请参阅“Docker 登录”。

发布映像

注意: GitHub Packages Docker 注册表 将在未来的 GitHub AE 版本中被 Container registry 取代,后者提供了改进的容器支持。

注意:映像名称只能使用小写字母。

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

在发布包后,您可以在 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 替换为包或映像的名称,将 HOSTNAME 替换为 your enterprise 的主机名,并将 VERSION 替换为生成时的包版本 。

    $ docker tag IMAGE_ID docker.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION
  3. 如果尚未为包生成 Docker 映像,请生成映像,将 OWNER 替换为拥有存储库的用户或组织帐户的名称,将 REPOSITORY 替换为包含项目的存储库的名称,将 IMAGE_NAME 替换为包或映像的名称,将 VERSION 替换为生成时的包版本,将 HOSTNAME 替换为 your enterprise 的主机名,并将 PATH 替换为映像路径(如果映像未在当前工作目录中) 。

    $ docker build -t docker.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION PATH
  4. 将映像发布到 GitHub Packages。

    $ docker push docker.HOSTNAME/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.HOSTNAME/octocat/octo-app/monalisa:1.0

# Push the image to GitHub Packages
$ docker push docker.HOSTNAME/octocat/octo-app/monalisa:1.0

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

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

# Push the image to GitHub Packages
$ docker push docker.HOSTNAME/octocat/octo-app/monalisa:1.0

下载图像

注意: GitHub Packages Docker 注册表 将在未来的 GitHub AE 版本中被 Container registry 取代,后者提供了改进的容器支持。

可以使用 docker pull 命令从 GitHub Packages 安装 Docker 映像,将 OWNER 替换为拥有存储库的用户或组织帐户的名称,将 REPOSITORY 替换为包含项目的存储库的名称,将 IMAGE_NAME 替换为包或映像的名称,将 HOSTNAME 替换为 your enterprise 的主机名, 并将 TAG_NAME 替换为要安装的映像的标记 。

$ docker pull docker.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:TAG_NAME

注意:必须使用 IMAGE_NAME:VERSION 而不是 IMAGE_NAME:SHA 拉取映像。

延伸阅读