此版本的 GitHub Enterprise 已停止服务 2021-09-23. 即使针对重大安全问题,也不会发布补丁。 要获得更好的性能、改进的安全性和新功能,请升级到 GitHub Enterprise 的最新版本。 如需升级方面的帮助,请联系 GitHub Enterprise 支持

使用 Docker 注册表

您可以使用 GitHub Packages Docker 注册表推送和拉取您的 Docker 映像,该注册表使用软件包命名空间 https://docker.pkg.github.com

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

注: GitHub Packages 目前正在测试用于 GitHub Enterprise Server 2.22。 要加入 您的 GitHub Enterprise Server 实例 的测试版,请使用注册表单

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

关于 Docker 支持

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

必须在 您的 GitHub Enterprise Server 实例 的网站管理员为您的实例启用 Docker 支持和子域隔离后,您才可在 GitHub Packages 上使用 Docker 注册表。 更多信息请参阅“为企业管理 GitHub Packages”。

向 GitHub Packages 验证

您需要访问令牌才能发布、安装和删除 GitHub Packages 中的包。

您可以使用个人访问令牌 (PAT) 向 GitHub Packages 或 GitHub 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 Enterprise Server 用户名,将 HOSTNAME 替换为 您的 GitHub Enterprise Server 实例, 的 URL,并将 ~/TOKEN.txt 替换为您用于 GitHub Enterprise Server 的个人访问令牌的文件路径。

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

发布映像

注:GitHub Packages Docker 注册表 将在未来的 GitHub Enterprise Server 版本中被 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 替换为 您的 GitHub Enterprise Server 实例 的主机名,并将 VERSION 替换为构建时的包版本。

    如果尚未为包构建 docker 映像,请构建映像,将 OWNER 替换为拥有仓库的用户或组织帐户的名称,将 REPOSITORY 替换为包含项目的仓库的名称,将 IMAGE_NAME 替换为包或映像的名称,将 VERSION 替换为构建时的包版本,将 PATH 替换为映像路径(如果映像未在当前工作目录中)。
  3. 如果尚未为包构建 docker 映像,请构建映像,将 OWNER 替换为拥有仓库的用户或组织帐户的名称,将 REPOSITORY 替换为包含项目的仓库的名称,将 IMAGE_NAME 替换为包或映像的名称,将 VERSION 替换为构建时的包版本,将 HOSTNAME 替换为 您的 GitHub Enterprise Server 实例 的主机名,将 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 Enterprise Server 版本中被 Container registry 取代,后者将提供更好的容器支持。

您可以使用 docker pull 命令从 GitHub Packages 安装 Docker 映像,将 OWNER 替换为拥有仓库的用户或组织帐户的名称,将 REPOSITORY 替换为包含项目的仓库的名称,将 IMAGE_NAME 替换为包或映像的名称,将HOSTNAME 替换为 您的 GitHub Enterprise Server 实例 的名称,将 TAG_NAME 替换为要安装的映像的标记。

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

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

延伸阅读