{{< details >}}
- Tier: 基础版, 专业版, 旗舰版
- Offering: JihuLab.com, 私有化部署
{{< /details >}}
您可以从您的容器镜像仓库中删除容器镜像。
要根据特定条件自动删除容器镜像,请使用垃圾回收。或者,您可以使用第三方工具创建 CI/CD 任务以删除特定项目中的容器镜像。
要从项目或群组中删除特定的容器镜像,您可以使用极狐GitLab UI或极狐GitLab API。
{{< alert type=”warning” >}}
删除容器镜像是一个不可撤销的操作。要恢复已删除的容器镜像,您必须重新构建并重新上传它。
{{< /alert >}}
垃圾回收
在极狐GitLab私有化部署实例上删除容器镜像不会释放存储空间,它仅将镜像标记为可删除。要实际删除未引用的容器镜像并回收存储空间,极狐GitLab私有化部署实例的管理员必须运行垃圾回收。
JihuLab.com 上的容器镜像仓库包括一个自动在线垃圾回收器。使用自动垃圾回收器时,以下内容如果未被引用,将在 24 小时内自动安排删除:
- 不被任何镜像清单引用的层。
- 没有标签且不被其他清单引用的镜像清单(例如多架构镜像)。
在线垃圾回收器是一个实例范围的功能,适用于所有命名空间。
使用极狐GitLab UI
要使用极狐GitLab UI 删除容器镜像:
- 在左侧边栏,选择 搜索或转到 并找到您的项目或群组。
- 对于:
- 一个群组,选择 操作 > 容器镜像仓库。
- 一个项目,选择 部署 > 容器镜像仓库。
- 在 容器镜像仓库 页面,您可以选择要删除的内容,通过以下任一方式:
- 选择红色的 {{< icon name=”remove” >}} 垃圾桶 图标,删除整个仓库及其包含的所有标签。
- 导航到仓库,选择要删除的标签旁边的红色 {{< icon name=”remove” >}} 垃圾桶 图标,单独或批量删除标签。
- 在对话框中,选择 删除标签。
容器仓库如果删除失败超过 10 次,将自动停止尝试删除镜像。
使用极狐GitLab API
您可以使用 API 自动化删除容器镜像的过程。有关更多信息,请参见以下端点:
使用极狐GitLab CI/CD
{{< alert type=”note” >}}
极狐GitLab CI/CD 不提供内置的方法来删除您的容器镜像。此示例使用名为 regctl
的第三方工具,该工具与极狐GitLab 仓库 API 通信。
{{< /alert >}}
以下示例定义了两个阶段:build
和 clean
。build_image
任务为分支构建容器镜像,delete_image
任务删除它。下载并使用 reg
可执行文件以删除匹配 $CI_PROJECT_PATH:$CI_COMMIT_REF_SLUG
的容器镜像 预定义 CI/CD 变量。
要使用此示例,请更改 IMAGE_TAG
变量以匹配您的需求。
stages:
- build
- clean
build_image:
image: docker:20.10.16
stage: build
services:
- docker:20.10.16-dind
variables:
IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $IMAGE_TAG .
- docker push $IMAGE_TAG
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: never
- if: $CI_COMMIT_BRANCH
delete_image:
stage: clean
variables:
IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
REGCTL_VERSION: v0.6.1
rules:
- if: $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH
image: alpine:latest
script:
- apk update
- apk add curl
- curl --fail-with-body --location "https://github.com/regclient/regclient/releases/download/${REGCTL_VERSION}/regctl-linux-amd64" > /usr/bin/regctl
- chmod 755 /usr/bin/regctl
- regctl registry login ${CI_REGISTRY} -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD}
- regctl tag rm $IMAGE
{{< alert type=”note” >}}
您可以从发布页面下载最新的 regctl
版本,然后通过更改 delete_image
任务中定义的 REGCTL_VERSION
变量来更新代码示例。
{{< /alert >}}
使用清理策略
您可以创建每个项目的清理策略,以确保定期从容器镜像仓库中删除旧的标签和镜像。