GitLab 容器注册表
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
您可以使用集成的容器注册表来存储每个 GitLab 项目的容器镜像。
要为您的 GitLab 实例启用容器注册表,请参阅管理员文档。
如果您从 Docker Hub 拉取容器镜像,可以使用 GitLab 依赖代理来避免 速率限制并加速您的流水线。
查看容器注册表
您可以查看项目或组的容器注册表。
- 在左侧边栏,选择 搜索或跳转至 并找到您的项目或组。
- 选择 部署 > 容器注册表。
您可以搜索、排序、过滤和删除 您的容器镜像。您可以通过复制浏览器中的 URL 来分享过滤后的视图。
在容器注册表中查看特定容器镜像的标签
您可以使用容器注册表 标签详情 页面查看与给定容器镜像关联的标签列表:
- 在左侧边栏,选择 搜索或跳转至 并找到您的项目或组。
- 选择 部署 > 容器注册表。
- 选择您的容器镜像。
您可以查看每个标签的详细信息,例如发布时间、占用的存储空间, 以及清单和配置摘要。
您可以在此页面上搜索、按标签名排序和删除 标签。您可以通过复制浏览器中的 URL 来分享过滤后的视图。
存储使用情况
查看容器注册表存储使用情况,以跟踪和管理跨项目和组的容器仓库大小。
有关更多信息,请参阅查看容器注册表使用情况。
使用容器注册表中的容器镜像
要下载并运行容器注册表中托管的容器镜像:
-
在左侧边栏,选择 搜索或跳转至 并找到您的项目或组。
-
选择 部署 > 容器注册表。
-
找到您要使用的容器镜像并选择 复制镜像路径 ( )。
-
使用
docker run和复制的链接:docker run [options] registry.example.com/group/project/image [arguments]
您必须向容器注册表进行身份验证才能下载 私有仓库中的容器镜像。
有关运行容器镜像的更多信息,请参阅 Docker 文档。
容器镜像的命名约定
您的容器镜像必须遵循此命名约定:
<注册表服务器>/<命名空间>/<项目>[/<可选路径>]例如,如果您的项目是 gitlab.example.com/mynamespace/myproject,
那么您的容器镜像必须命名为 gitlab.example.com/mynamespace/myproject。
您可以在容器镜像名称的末尾附加额外的名称,最多两个层级深度。
例如,这些都是名为 myproject 的项目中容器镜像的有效名称:
registry.example.com/mynamespace/myproject:some-tagregistry.example.com/mynamespace/myproject/image:latestregistry.example.com/mynamespace/myproject/my/image:rc1移动或重命名容器注册表仓库
容器仓库的路径始终匹配相关项目的仓库路径, 因此无法仅重命名或移动容器注册表。相反,您可以 重命名或移动 整个项目。
重命名包含已填充容器仓库的项目仅在 GitLab.com 上受支持。
在 GitLab 自托管实例上,您可以在移动或重命名 组或项目之前删除所有容器镜像。或者,问题 18383 包含社区建议来绕过此限制。史诗 9459 提议为 GitLab 自托管添加对移动包含容器仓库的项目和组的支持。
为项目禁用容器注册表
容器注册表默认启用。
但是,您可以删除项目的容器注册表:
- 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
- 选择 设置 > 常规。
- 展开 可见性、项目功能、权限 部分 并禁用 容器注册表。
- 选择 保存更改。
部署 > 容器注册表 条目将从项目的侧边栏中移除。
更改容器注册表的可见性
默认情况下,容器注册表对项目有访问权限的每个人可见。 但是,您可以更改项目容器注册表的可见性。
有关此设置授予用户权限的更多信息, 请参阅容器注册表可见性权限。
-
在左侧边栏,选择 搜索或跳转至 并找到您的项目。
-
选择 设置 > 常规。
-
展开 可见性、项目功能、权限 部分。
-
在 容器注册表 下,从下拉列表中选择一个选项:
-
有访问权限的每个人(默认):容器注册表对项目有访问权限的每个人可见。 如果项目是公开的,容器注册表也是公开的。如果项目是内部或私有的, 容器注册表也是内部或私有的。
-
仅项目成员:容器注册表仅对具有至少 Reporter 角色的项目成员可见。 此可见性与将容器注册表可见性设置为 有访问权限的每个人 的私有项目行为类似。
-
-
选择 保存更改。
容器注册表可见性权限
查看容器注册表和拉取容器镜像的能力由容器注册表的可见性权限控制。 您可以通过UI 上的可见性设置 或API更改可见性。 其他权限(如更新容器注册表和推送或删除容器镜像)不受此设置影响。 但是,禁用容器注册表将禁用所有容器注册表操作。
| 匿名用户 (互联网上的每个人) |
访客 | 报告者、开发者、维护者、所有者 | ||
|---|---|---|---|---|
| 公开项目,容器注册表可见性 设置为 有访问权限的每个人(UI)或 enabled(API) |
查看容器注册表 和拉取镜像 |
Yes | Yes | Yes |
| 公开项目,容器注册表可见性 设置为 仅项目成员(UI)或 private(API) |
查看容器注册表 和拉取镜像 |
No | No | Yes |
| 内部项目,容器注册表可见性 设置为 有访问权限的每个人(UI)或 enabled(API) |
查看容器注册表 和拉取镜像 |
No | Yes | Yes |
| 内部项目,容器注册表可见性 设置为 仅项目成员(UI)或 private(API) |
查看容器注册表 和拉取镜像 |
No | No | Yes |
| 私有项目,容器注册表可见性 设置为 有访问权限的每个人(UI)或 enabled(API) |
查看容器注册表 和拉取镜像 |
No | No | Yes |
| 私有项目,容器注册表可见性 设置为 仅项目成员(UI)或 private(API) |
查看容器注册表 和拉取镜像 |
No | No | Yes |
任何容器注册表 disabled 的项目 |
容器注册表上的所有操作 | No | No | No |
支持的镜像类型
容器注册表支持 Docker V2 和 Open Container Initiative (OCI) 镜像格式。此外,容器注册表符合 OCI 分发规范。
OCI 支持意味着您可以在注册表中托管基于 OCI 的镜像格式,例如 Helm 3+ chart 包。 在 GitLab API 和 UI 中,镜像格式之间没有区别。问题 38047 从 Helm 开始解决这种区别。
容器镜像签名
在 GitLab 容器注册表中,您可以使用 OCI 1.1 manifest subject 字段
将容器镜像与 Cosign 签名 关联。
然后,您可以查看与其关联容器镜像旁边的签名信息,而无需
搜索该签名的标签。
当查看容器镜像的标签时, 您会在每个有关联签名的标签旁边看到一个图标。要查看签名详情,请选择该图标。
先决条件:
- 要签名容器镜像,需要 Cosign v2.0 或更高版本。
- 对于 GitLab 自托管,您需要配置了 元数据库的 GitLab 容器注册表 来显示签名。
使用 OCI 引用程序数据签名容器镜像
要使用 Cosign 为签名添加引用程序数据,您必须:
- 将
COSIGN_EXPERIMENTAL环境变量设置为1。 - 在签名命令中添加
--registry-referrers-mode oci-1-1。
例如:
COSIGN_EXPERIMENTAL=1 cosign sign --registry-referrers-mode oci-1-1 <容器镜像>虽然 GitLab 容器注册表支持 OCI 1.1 manifest subject 字段,但它没有完全
实现 OCI 1.1 Referrers API。