中将图像添加到命名空间 Container Registry
通过在 IBM Cloud® Container Registry 的 命名空间在注册表中存储映像的存储库的集合。 名称空间与 IBM Cloud 帐户相关联,该帐户可以包含多个名称空间。中添加图像,您可以安全地存储 Docker 图像并与其他用户共享。
您要添加到名称空间的每个映像首先必须在您的本地计算机上存在。 你可以从其他资源库下载(拉取)镜像到本地计算机,也可以使用 Docker build
命令从 Dockerfile一种文本文件,包含用于构建 Docker 映像的指令。 构建自己的镜像。 要将映像添加到名称空间,必须将本地映像上传(推送)到
IBM Cloud Container Registry 中的名称空间。
不要将个人信息放入容器映像、名称空间名称、描述字段或任何映像配置数据(例如,映像名称或映像标签)中。
从其他注册表拉出映像
您可以从任何私人或公共 注册包含用于创建容器的公共或专用映像的存储和分发服务。源提取(下载)图像到您的电脑,然后在 IBM Cloud Container Registry 中对其进行标记,以便日后使用。
开始之前,请完成以下任务。
-
安装 CLI 以在名称空间中使用映像。
-
确保可以在没有 root 权限的情况下运行 Docker 命令。 如果您的 Docker 客户机设置为需要 root 用户许可权,那么必须使用
ibmcloud login
运行ibmcloud cr login
、docker pull
、docker push
和sudo
命令。如果将许可权更改为在没有 root 用户特权的情况下运行 Docker 命令,那么必须重新运行
ibmcloud login
命令。
-
下载映像;请参阅入门文档中的拉出映像。
如果收到
unauthorized: authentication required
或denied: requested access to the resource is denied
消息,请运行ibmcloud cr login
命令。
提取图像并为 命名空间 添加标记 后,就可以从本地计算机上传(推送)图像到命名空间。
如果您部署了一个从 Container Registry 中提取图像的工作负载,并且您的 pod 因 ImagePullBackOff 状态而失败,请参阅 为什么图像因 ImagePullBackOff 或授权错误而无法从注册表中提取? 以获取帮助。
将 Docker 映像推送到名称空间
您可以将计算机中的图像推送(上传)到 IBM Cloud Container Registry 中的命名空间,以存储图像并与其他用户共享。
开始之前,请完成以下任务。
-
安装 CLI 以在名称空间中使用映像。
-
确保可以在没有 root 权限的情况下运行 Docker 命令。 如果您的 Docker 客户机设置为需要 root 用户许可权,那么必须使用
ibmcloud login
运行ibmcloud cr login
、docker pull
、docker push
和sudo
命令。如果将许可权更改为在没有 root 用户特权的情况下运行 Docker 命令,那么必须重新运行
ibmcloud login
命令。
IBM Cloud Container Registry 支持其他客户端以及。Docker 要使用其他客户端登录,请参阅 交互式访问命名空间。
要上传(推送)映像,请完成以下步骤:
-
运行
ibmcloud cr login
命令登录 CLI。ibmcloud cr login
必须登录才能从专用 IBM Cloud Container Registry 拉出映像。
如果您在尝试登录时遇到问题,请参阅“为什么我无法登录 Container Registry?”获取帮助。
-
要查看帐户中可用的所有名称空间,请运行
ibmcloud cr namespace-list
命令。 -
如果您收到
unauthorized: authentication required
或denied: requested access to the resource is denied
消息,请运行ibmcloud cr login
命令。
将图像推送到 IBM Cloud Container Registry 后,您可以执行以下任务之一。
- 使用 Vulnerability Advisor 管理安全性,以查找潜在安全问题和漏洞的相关信息。
- 创建集群并使用此映像部署容器至 IBM Cloud Kubernetes Service 中的集群。
在注册表之间复制映像
您可以在注册表之间复制映像,方法是从一个区域的注册表中提取映像,然后将其推送到另一个区域的注册表中,这样您就可以与两个区域的用户共享映像。
开始之前,请完成以下任务。
-
安装 CLI 以在名称空间中使用映像。
-
确保可以在没有 root 权限的情况下运行 Docker 命令。 如果您的 Docker 客户机设置为需要 root 用户许可权,那么必须使用
ibmcloud login
运行ibmcloud cr login
、docker pull
、docker push
和sudo
命令。如果将许可权更改为在没有 root 用户特权的情况下运行 Docker 命令,那么必须重新运行
ibmcloud login
命令。
要在两个注册表之间复制映像,请完成以下步骤:
- 从注册表拉出映像。
- 将映像推送到另一个注册表。 确保针对新的目标地区使用正确的 域名。
复制图像后,您可以执行以下任务之一。
- 通过 Vulnerability Advisor 管理图像安全性,查找有关潜在安全问题和漏洞的信息。
- 创建集群并使用此映像部署容器至 IBM Cloud Kubernetes Service 中的集群。
创建引用源图像的图像
使用 ibmcloud cr image-tag
命令创建图像。
在您登录的区域中,在 IBM Cloud Container Registry 中创建一个图像,引用同一区域中的现有图像。 使用受支持版本的 Docker Engine 创建的源图像支持此操作,请参阅 支持 Docker。
使用此机制创建的新映像不会保留签名。 如果需要对新映像进行签名,请不要使用此机制。
开始之前,请完成以下任务。
- 安装 CLI 以在名称空间中使用映像。
- 确保您有权访问 IBM Cloud Container Registry 中包含要被其他映像引用的源映像的专用名称空间。
要从源图像创建图像,请完成以下步骤。
-
运行
ibmcloud cr login
命令登录 CLI。ibmcloud cr login
-
运行以下命令以添加新引用,其中
SOURCE_IMAGE
是源映像的名称,TARGET_IMAGE
是目标映像的名称。SOURCE_IMAGE
的格式必须是repository:tag
或repository@digest
,TARGET_IMAGE
的格式必须是repository:tag
,例如us.icr.io/namespace/image:latest
。要查找映像的名称,请运行
ibmcloud cr image-list
。 将“存储处”列 (repository
) 和 “标签”列 (tag
) 的内容用冒号 (:
) 分隔,创建格式为repository:tag
的图像名称。 要通过摘要识别图像,请运行ibmcloud cr image-digests
命令。 将“存储处”列 (repository
) 和“摘要”列 (digest
) 的内容用 at (@
) 符号分隔,创建格式为repository@digest
的图像名称。 如果列出图像命令超时,请参阅 为什么列出图像时会超时? 以获取帮助。ibmcloud cr image-tag [SOURCE_IMAGE] [TARGET_IMAGE]
-
运行以下命令验证是否创建了新的镜像,并检查镜像是否以与源镜像相同的镜像 摘要 显示在列表中。
ibmcloud cr image-list
构建 Docker 映像以用于名称空间
您可以直接在 IBM Cloud 中构建 Docker 映像,也可以在本地计算机上创建自己的 Docker 映像,然后将其上传(推送)至 IBM Cloud Container Registry 中的名称空间。
开始之前,请完成以下任务。
-
安装 CLI 以在名称空间中使用映像。
-
确保可以在没有 root 权限的情况下运行 Docker 命令。 如果您的 Docker 客户机设置为需要 root 用户许可权,那么必须使用
ibmcloud login
运行ibmcloud cr login
、docker pull
、docker push
和sudo
命令。如果将许可权更改为在没有 root 用户特权的情况下运行 Docker 命令,那么必须重新运行
ibmcloud login
命令。
Docker 映像是您所创建的每个容器的基础。 映像是通过 Dockerfile 创建的,该文件包含构建映像的指令。 Dockerfile 可能会在其指令中引用单独存储的构建工件,如应用程序、应用程序的配置及其依赖关系。
如果要利用 IBM Cloud 计算资源和因特网连接,或者 Docker 未安装在工作站上,请直接在 IBM Cloud 中构建映像。 如果需要访问构建中位于防火墙后的服务器上的资源,请本地构建映像。
要构建自己的 Docker 映像,请完成以下步骤:
-
创建要用于存储构建上下文的本地目录。 构建上下文包含 Dockerfile 及相关构建工件(如应用程序代码)。 在命令行窗口中导航到该目录。
-
创建 Dockerfile。
-
在本地目录中创建 Dockerfile。
touch Dockerfile
-
使用文本编辑器打开 Dockerfile。 您至少必须添加基本映像,以从中构建映像。 将
SOURCE_IMAGE
和TAG
替换为要使用的图像存储库和标记。 如果使用的是其他私有注册表中的映像,请在 IBM Cloud Container Registry 中定义映像的完整路径。FROM SOURCE_IMAGE:TAG
例如,要创建基于公开 IBM WebSphere Application Server Liberty (
ibm/liberty
) 映像的 Dockerfile,请使用以下命令。FROM icr.io/ibm/liberty:latest LABEL description="This is my test Dockerfile" EXPOSE 9080
此示例可向映像元数据添加标签并公开 9080 端口。 如需了解更多可以使用的 Dockerfile 说明,请参阅 Dockerfile 参考资料。
-
-
确定映像的名称。 图像名称必须采用以下格式,其中
REGION
是区域,MY_NAMESPACE
是命名空间信息,REPO_NAME
是版本库名称,TAG
是图像要使用的版本:REGION.icr.io/MY_NAMESPACE/REPO_NAME:TAG
要查找名称空间,请运行
ibmcloud cr namespace-list
命令。 -
记下包含 Dockerfile 的目录的路径。 如果运行以下步骤中的命令时,工作目录已设置为构建上下文的存储位置,则可以用句点(.)代替
DIRECTORY
。 -
在将图像推送到 IBM Cloud 之前,先在本地构建和测试图像。
-
在本地计算机上根据 Dockerfile 构建镜像,并用镜像名称标记,其中
IMAGE_NAME
是镜像名称,DIRECTORY
是目录路径。docker build -t IMAGE_NAME DIRECTORY
-
可选:在本地计算机上测试映像,然后再将其推送到名称空间。
docker run IMAGE_NAME
将
IMAGE_NAME
替换为图像名称。 -
创建映像并针对名称空间对其进行标记后,可以将该映像推送到 IBM Cloud Container Registry 中的名称空间。
-
要使用 Vulnerability Advisor 来检查映像的安全性,请参阅使用 Vulnerability Advisor 管理映像安全性。
使用 API 密钥推送图像
创建一个服务 ID,使用 API 密钥用于验证和授权API请求的唯一代码。 代码被传递给应用程序接口(API),用于识别调用应用程序或用户,并跟踪和控制API的使用情况。将图片推送到 IBM Cloud Container Registry。
完成以下步骤:
- 要创建服务标识,请参阅创建和使用服务标识。
- 创建赋予服务 ID 访问注册表权限的策略,例如管理员和经理角色,请参阅 管理 Container Registry 的 IAM 访问 权限。
- 要创建 API 密钥,请参阅为服务标识创建 API 密钥。
- 使用 API 密钥登录注册表,以便将图像推送到注册表,请参阅 自动访问 IBM Cloud Container Registry。
- 要推送映像,请参阅将 Docker 映像推送到名称空间。
您现在可以使用集群拉出映像,请参阅从映像构建容器。
删除私人资源库中图片的标记
您可以从私有 IBM Cloud 存储库中的图像中删除一个或多个 标签,并使用 ibmcloud cr image-untag
命令。
如果资源库中的同一图像 摘要 存在多个标签,而您又想删除底层图像及其所有标签,请参阅 从私人 IBM Cloud 资源库中删除图像。
要使用 CLI 除去一个或多个标记,请完成以下步骤:
-
通过运行
ibmcloud login
命令登录到 IBM Cloud。 -
要删除标签,请运行以下命令,其中
IMAGE
是要删除的图像名称,格式为repository:tag
. 如果映像名称中未指定标记,那么命令将失败。 可以通过在命令中列出每个专用 IBM Cloud 注册表路径(各路径之间用一个空格分隔)来从多个映像删除标记。ibmcloud cr image-untag IMAGE
要查找映像的名称,请运行
ibmcloud cr image-list
。 将“存储处”列 (repository
) 和 “标签”列 (tag
) 的内容用冒号 (:
) 分隔,创建格式为repository:tag
的图像名称。 -
通过运行以下命令,验证是否已除去标记,然后检查该标记是否不再出现在列表中。
ibmcloud cr image-list
如果列出图像命令超时,请参阅 为什么列出图像时会超时? 以获取帮助。
从私人资源库中删除图像
您可以使用 IBM Cloud 控制台或 CLI 从私人 IBM Cloud 资源库中删除不需要的图像。
如果要删除专用存储库及其关联的映像,请参阅删除专用存储库和任何关联的映像。
删除现有部署正在使用的映像可能会导致扩展、重新安排或两者都失败。
如果要复原已删除的映像,可以通过运行 ibmcloud cr trash-list
命令来列出废纸篓的内容,然后运行 ibmcloud cr image-restore
命令来复原所选映像。
存储库中对于相同的映像摘要存在多个标记时,ibmcloud cr image-rm
命令会除去底层的映像及其所有标记。 如果同一映像存在于不同的版本库或命名空间中,则不会删除该映像的副本。 如果您想要从图像中删除标签并保留底层图像和任何其他标签,请参阅 从私有存储库命令中的图像中删除标签。
使用 CLI 从私有资源库中删除映像
您可以使用 CLI 从私人 IBM Cloud 储存库中删除不需要的图片及其所有标签。
删除现有部署正在使用的映像可能会导致扩展、重新安排或两者都失败。
如果要复原已删除的映像,可以通过运行 ibmcloud cr trash-list
命令来列出废纸篓的内容,然后运行 ibmcloud cr image-restore
命令来复原所选映像。
要使用 CLI 删除映像,请完成以下步骤:
-
通过运行
ibmcloud login
命令登录到 IBM Cloud。 -
要删除图像,请运行以下命令,其中
IMAGE
是要删除的图像名称,格式为repository@digest
或repository:tag
。 如果未在映像名称中指定标记,那么缺省情况下会删除标记为latest
的映像。 可以通过在命令中列出每个专用 IBM Cloud 注册表路径(各路径之间用一个空格分隔)来删除多个映像。ibmcloud cr image-rm IMAGE
要查找映像的名称,请运行
ibmcloud cr image-list
。 将“存储处”列 (repository
) 和 “标签”列 (tag
) 的内容用冒号 (:
) 分隔,创建格式为repository:tag
的图像名称。 要通过摘要识别图像,请运行ibmcloud cr image-digests
命令。 将“存储处”列 (repository
) 和“摘要”列 (digest
) 的内容用 at (@
) 符号分隔,创建格式为repository@digest
的图像名称。 如果列出图像命令超时,请参阅 为什么列出图像时会超时? 以获取帮助。 -
通过运行以下命令,验证是否已删除映像,然后检查该映像是否不再出现在列表中。
ibmcloud cr image-list
在控制台中删除私人资源库中的图像
您可以使用 IBM Cloud 控制台从私人 IBM Cloud 图像存储库中删除不需要的图像及其所有标签。
删除现有部署正在使用的映像可能会导致扩展、重新安排或两者都失败。
如果要复原已删除的映像,可以通过运行 ibmcloud cr trash-list
命令来列出废纸篓的内容,然后运行 ibmcloud cr image-restore
命令来复原所选映像。
要使用 IBM Cloud 控制台删除图像,请完成以下步骤:
- 登录 IBM Cloud 控制台 https://cloud.ibm.com/loginIBMid。
- 如果您有多个 IBM Cloud 账户,请从账户菜单中选择要使用的账户和地区。
- 单击导航菜单图标,然后单击 Container Registry.
- 单击 映像。 这将显示映像的列表。
- 在包含要删除的图片的行中,选择复选框。
- 单击 删除映像。
列出废纸篓中的映像
可以列出废纸篓中已删除的映像,并查看它们何时到期。
要了解废纸篓中有哪些映像,可以使用 ibmcloud cr trash-list
命令。 映像会在废纸篓中存储 30 天。
要列出废纸篓中的映像,请完成以下步骤:
-
通过运行
ibmcloud login
命令登录到 IBM Cloud。 -
通过运行以下命令来列出废纸篓中的映像:
ibmcloud cr trash-list
-
运行以下命令(其中
NAMESPACE
是你的命名空间),只列出你感兴趣的命名空间垃圾中的图像:ibmcloud cr trash-list --restrict NAMESPACE
复原映像
您可以从垃圾中恢复图像。 已删除的映像会在废纸篓中存储 30 天。
可以通过运行 ibmcloud cr image-restore
命令,从废纸篓复原映像。 要了解废纸篓中有哪些映像,请运行 ibmcloud cr trash-list
命令。
运行 ibmcloud cr image-restore
命令来还原图像。 您可以使用以下选项:
通过摘要复原映像
通过摘要还原映像时,摘要会从垃圾桶复制到实时版本库中,版本库中摘要的所有标记也会还原。 该摘要会继续显示在废纸篓中,因为复原的是其副本。
要通过摘要从废纸篓复原映像,请完成以下步骤:
-
通过运行
ibmcloud login
命令登录到 IBM Cloud。 -
通过运行以下命令来列出废纸篓中的映像:
ibmcloud cr trash-list
这将显示一个表,其中显示废纸篓中的各项。 该表会显示摘要、到期之前的天数以及该摘要的标记。
-
记下要复原的映像的摘要。
-
运行以下命令将映像还原到版本库中。 其中
DNS
是 域名,NAMESPACE
是 命名空间,REPO
是 存储库,DIGEST
是要恢复的映像的 摘要。ibmcloud cr image-restore DNS/NAMESPACE/REPO@DIGEST
如果某些标记没有还原,请参阅 当我通过摘要还原时,为什么没有还原所有标记? 获取帮助。
在实时存储库中,可以通过摘要拉出映像。 如果运行
ibmcloud cr image-digests
命令,就会在输出中显示图像。
通过标记复原映像
通过标记复原映像时,仅会将该特定标记从废纸篓移出到活动存储库中。
要通过标记从废纸篓复原映像,请完成以下步骤:
-
通过运行
ibmcloud login
命令登录到 IBM Cloud。 -
通过运行以下命令来列出废纸篓中的映像:
ibmcloud cr trash-list
这将显示一个表,其中显示废纸篓中的各项。 该表会显示摘要、到期之前的天数以及该摘要的标记。
-
对于要还原的映像,请记下直到(但不包括)at 符号 (
@
) 的摘要。摘要的这一部分是DNS/NAMESPACE/REPO
,其中DNS
是域名,NAMESPACE
是命名空间,REPO
是存储库。 -
对于要还原的图像,请记下标签,
TAG
。 -
运行以下命令将镜像还原到版本库中,其中
DNS/NAMESPACE/REPO
是要还原的镜像名称,TAG
是标签。ibmcloud cr image-restore DNS/NAMESPACE/REPO:TAG
在实时存储库中,可以通过标记拉出映像。
如果在还原图像时出现错误,提示已标记的图像存在,请参阅 " 为什么在还原图像时出现错误?
如果运行
ibmcloud cr trash-list
命令,输出中会显示摘要和任何其他标记,但不再显示标记。
删除专用存储库和任何关联的映像
您可以使用 IBM Cloud 控制台删除不再需要的私有存储库和任何相关图像。
删除存储库时,将删除该存储库中的所有映像。 此操作无法撤销。
在开始之前,必须备份要保留的任何映像。
要使用 IBM Cloud 控制台删除私有资源库,请完成以下步骤:
-
登录 IBM Cloud 控制台 https://cloud.ibm.com/loginIBMid。
-
如果您有多个 IBM Cloud 账户,请从账户菜单中选择要使用的账户和地区。
-
单击导航菜单图标,然后单击 Container Registry.
-
单击 存储库。 这将显示专用存储库的列表。
-
在包含要删除的私有资源库的行中,选择复选框。
确保选择了正确的存储库,因为该操作无法撤销。
-
单击 删除存储库。