Note
这种包类型可能不适用于你的实例,因为站点管理员可以启用或禁用每种支持的包类型。 有关详细信息,请参阅“为企业配置包生态系统支持”。
关于 Docker 支持
安装或发布 Docker 映像时,Docker 注册表目前不支持外部层,例如 Windows 映像。
Docker Engine v25 与 GitHub Enterprise Server 上的 Docker 注册表不兼容。 建议改用 Container registry。 有关迁移的信息,请参阅“从 Docker 注册表迁移到容器注册表”。
向 GitHub Packages 验证
Note
GitHub Packages 仅支持使用 personal access token (classic) 进行身份验证。 有关详细信息,请参阅“管理个人访问令牌”。
需要访问令牌才能发布、安装和删除专用、内部和公共包。
可使用 personal access token (classic) 向 GitHub Packages 或 GitHub Enterprise Server API 进行身份验证。 创建 personal access token (classic) 时,可根据需要为令牌分配不同的作用域。 有关 personal access token (classic) 的包相关范围的详细信息,请参阅“关于 GitHub Packages 的权限”。
要在 GitHub Actions 工作流程内向 GitHub Packages 注册表验证,您可以使用:
GITHUB_TOKEN
发布与工作流存储库相关联的包。- 范围至少为
read:packages
的 personal access token (classic),用于安装与其他专用存储库(GITHUB_TOKEN
无法访问)关联的包。
有关 GitHub Actions 工作流中使用的 GITHUB_TOKEN
的详细信息,请参阅“自动令牌身份验证”。
使用 personal access token 进行身份验证
必须使用具有适当范围的 personal access token (classic) 才可在 GitHub Packages 中发布和安装包。 有关详细信息,请参阅“GitHub Packages 简介”。
可以使用 docker
登录命令,通过 Docker 向 GitHub Packages 验证。
为了确保凭据安全,我们建议将 personal access token 保存在计算机的本地文件中,然后使用 Docker 的 --password-stdin
标志从本地文件读取令牌。
如果实例启用了子域隔离:
cat ~/TOKEN.txt | docker login docker.HOSTNAME -u USERNAME --password-stdin
如果实例禁用了子域隔离:
cat ~/TOKEN.txt | docker login HOSTNAME -u USERNAME --password-stdin
要使用此示例登录命令,请将 USERNAME
替换为 GitHub Enterprise Server 用户名,将 HOSTNAME
替换为 你的 GitHub Enterprise Server 实例 的 URL,并将 ~/TOKEN.txt
替换为用于 GitHub Enterprise Server 的 personal access token 的文件路径。
有关详细信息,请参阅 Docker 登录。
发布映像
Note
GitHub Packages Docker 注册表将在未来的GitHub Enterprise Server版本中被Container registry取代,后者提供了改进的容器支持。
Note
映像名称只能使用小写字母。
GitHub Packages 支持每个仓库的多个顶层 Docker 镜像。 仓库可以拥有任意数量的映像标记。 在发布或安装大于 10GB 的 Docker 映像(每个图层上限为 5GB)时,可能会遇到服务降级的情况。 有关详细信息,请参阅 Docker 文档中的 Docker 标记。
在发布包后,您可以在 GitHub 上查看该包。 有关详细信息,请参阅“查看包”。
-
使用
docker images
确定 Docker 映像的名称和 ID。$ docker images > < > > REPOSITORY TAG IMAGE ID CREATED SIZE > IMAGE_NAME VERSION IMAGE_ID 4 weeks ago 1.11MB
-
使用 Docker 映像 ID、标记和 Docker 映像将 OWNER 替换为拥有存储库的个人帐户或组织的名称,将 REPOSITORY 替换为包含你的项目的存储库的名称,将 IMAGE_NAME 替换为包或映像的名称,将 HOSTNAME 替换为 你的 GitHub Enterprise Server 实例 的主机名,并将 VERSION 替换为生成时的包版本。
如果实例启用了子域隔离:
docker tag IMAGE_ID docker.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION
如果实例禁用了子域隔离:
docker tag IMAGE_ID HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION
- 如果尚未为包生成 Docker 映像,请生成映像,将 OWNER 替换为拥有存储库的个人帐户或组织的名称,将 REPOSITORY 替换为包含你的项目的存储库的名称,将 IMAGE_NAME 替换为包或映像的名称,将 VERSION 替换为生成时的包版本,将 HOSTNAME 替换为 你的 GitHub Enterprise Server 实例 的主机名,并将 PATH 替换为映像路径(如果映像未在当前工作目录中)。
如果实例启用了子域隔离:
docker build -t docker.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION PATH
如果实例禁用了子域隔离:
docker build -t HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION PATH
- 将映像发布到 GitHub Packages。
如果实例启用了子域隔离:
docker push docker.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION
如果实例禁用了子域隔离:
docker push HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION
Note
必须使用 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
下载图像
Note
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
如果实例禁用了子域隔离:
docker pull HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:TAG_NAME
Note
注意:必须使用 IMAGE_NAME:VERSION
而不是 IMAGE_NAME:SHA
拉取映像。