如何从命令行列出和删除 GCP AppEngine 映像?
How can I list and delete GCP AppEngine images from the command line?
我想从 Google Cloud Platform 中删除我未使用的旧 AppEngine 图像,这样我就不会因为存储它们而被收费。
我可以从此 URL 手动列出和删除为我的 GCP AppEngine 项目创建的图像:
https://console.cloud.google.com/gcr/images/GOOGLE_CLOUD_PROJECT_ID
(显然,将 GOOGLE_CLOUD_PROJECT_ID 替换为适当的 GCP 项目 ID。)
有没有办法从命令行列出它们?例如通过 gcloud
?
这并不像我预期的那样有效:
$ gcloud compute images list --no-standard-images
Listed 0 items.
这也不行:
$ gcloud container images list
Listed 0 items.
Only listing images in gcr.io/GOOGLE_CLOUD_PROJECT_ID. Use --repository to list images in other repositories.
进入并手动删除很多这些有点痛苦,因为 https://console.cloud.google.com/gcr/images/GOOGLE_CLOUD_PROJECT_ID/US/appengine 下的每个图像都在一个单独的目录中,我必须先单击进入 select 图像,然后单击删除按钮,然后返回到 appengine 目录并为任何其他图像再次启动该过程。
您提供的开发人员控制台的 link 指的是 Container Registry,您的容器映像存储在其中,包括在 App Engine 灵活部署期间创建的那些。
您可以使用以下 gcloud 命令按位置列出这些图像:
gcloud container images list --repository=[HOSTNAME]/[PROJECT-ID]
其中 [HOSTNAME] 是以下四个选项之一:gcr.io
、us.gcr.io
、eu.gcr.io
或 asia.gcr.io
。
然后您可以使用以下命令删除图像:
gcloud container images delete [HOSTNAME]/[PROJECT-ID]/[IMAGE]@[IMAGE_DIGEST]
您可以在网上找到有关它的详细信息 documentation。
列出图片
感谢 LundinCast 的回答,我使用 us.gcr.io 作为主机名,我能够这样做:
$ gcloud container images list --repository=us.gcr.io/GCP_PROJECT_ID
NAME
us.gcr.io/GCP_PROJECT_ID/appengine
显然 AppEngine 使用嵌套存储库:
$ gcloud container images list --repository=us.gcr.io/GCP_PROJECT_ID/appengine
NAME
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t162317
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181113t132223
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181113t150454
us.gcr.io/GCP_PROJECT_ID/appengine/default.20181108t184629
us.gcr.io/GCP_PROJECT_ID/appengine/default.20181108t205831
us.gcr.io/GCP_PROJECT_ID/appengine/DEF.20181113t163644
这并没有像我预期的那样工作:
$ gcloud container images list --repository=us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
Listed 0 items.
相反,我必须这样做:
$ gcloud container images list-tags us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
DIGEST TAGS TIMESTAMP
c8e3797d36b2 latest 2018-11-10T12:57:58
正在删除图像
根据documentation for deleting images,可以删除...
- 由其摘要识别的图像
- 由标签标识的图像,并且它有多个标签
通过(隐式)标签删除图像
当我尝试删除单个版本/标签时,出现提示:
$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
WARNING: Implicit ":latest" tag specified: us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
Digests:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425@sha256:c8e3797d36b27599c91e231afd5521e6a1283319fce5a0fd978b7cdcdb1d4181
Associated tags:
- latest
Tags:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425:latest
This operation will delete the tags and images identified by the
digests above.
Do you want to continue (Y/n)? n
ERROR: (gcloud.container.images.delete) Aborted by user.
这对于编写可以自动删除旧图像的脚本或程序来说有点问题(尽管我可以将 yes 命令通过管道传输到 gcloud container images delete IMAGE
命令);幸运的是,有一个 --quiet
参数可以使用:
$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425 --quiet
WARNING: Implicit ":latest" tag specified: us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
Digests:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425@sha256:c8e3797d36b27599c91e231afd5521e6a1283319fce5a0fd978b7cdcdb1d4181
Associated tags:
- latest
Tags:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425:latest
Deleted [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425:latest].
Deleted [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425@sha256:c8e3797d36b27599c91e231afd5521e6a1283319fce5a0fd978b7cdcdb1d4181].
所以,这奏效了。
正在按摘要删除图片
在另一张图片上重试,使用摘要删除图片的方法:
$ gcloud container images list-tags us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726
DIGEST TAGS TIMESTAMP
4d860e73f85f latest 2018-11-10T15:50:55
惊喜!您不能只使用列出的摘要:
$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@4d860e73f85f
ERROR: (gcloud.container.images.delete) [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@4d860e73f85f] digest must be of the form "sha256:<digest>".
这有点奇怪(只有一个标签,"latest",甚至在错误中都没有显示):
$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85f
ERROR: Tags:
ERROR: (gcloud.container.images.delete) This operation will implicitly delete the tags listed above. Please manually remove with the `untag` command or re-run with --force-delete-tags to confirm.
好的,让我们使用 --force-delete-tags
:
$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85f --force-delete-tags
Digests:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85fdddb485e85dc867653e3e6095a5225f4f670200c98ede10fb542
Associated tags:
- latest
This operation will delete the tags and images identified by the digests above.
Do you want to continue (Y/n)? n
ERROR: (gcloud.container.images.delete) Aborted by user.
和以前一样,让我们使用--quiet
来防止显示提示:
$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85f --force-delete-tags --quiet
Digests:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85fdddb485e85dc867653e3e6095a5225f4f670200c98ede10fb542
Associated tags:
- latest
Deleted [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726:latest].
Deleted [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85fdddb485e85dc867653e3e6095a5225f4f670200c98ede10fb542].
因此,按摘要删除需要更冗长的命令行。
我想从 Google Cloud Platform 中删除我未使用的旧 AppEngine 图像,这样我就不会因为存储它们而被收费。
我可以从此 URL 手动列出和删除为我的 GCP AppEngine 项目创建的图像: https://console.cloud.google.com/gcr/images/GOOGLE_CLOUD_PROJECT_ID
(显然,将 GOOGLE_CLOUD_PROJECT_ID 替换为适当的 GCP 项目 ID。)
有没有办法从命令行列出它们?例如通过 gcloud
?
这并不像我预期的那样有效:
$ gcloud compute images list --no-standard-images
Listed 0 items.
这也不行:
$ gcloud container images list
Listed 0 items.
Only listing images in gcr.io/GOOGLE_CLOUD_PROJECT_ID. Use --repository to list images in other repositories.
进入并手动删除很多这些有点痛苦,因为 https://console.cloud.google.com/gcr/images/GOOGLE_CLOUD_PROJECT_ID/US/appengine 下的每个图像都在一个单独的目录中,我必须先单击进入 select 图像,然后单击删除按钮,然后返回到 appengine 目录并为任何其他图像再次启动该过程。
您提供的开发人员控制台的 link 指的是 Container Registry,您的容器映像存储在其中,包括在 App Engine 灵活部署期间创建的那些。
您可以使用以下 gcloud 命令按位置列出这些图像:
gcloud container images list --repository=[HOSTNAME]/[PROJECT-ID]
其中 [HOSTNAME] 是以下四个选项之一:gcr.io
、us.gcr.io
、eu.gcr.io
或 asia.gcr.io
。
然后您可以使用以下命令删除图像:
gcloud container images delete [HOSTNAME]/[PROJECT-ID]/[IMAGE]@[IMAGE_DIGEST]
您可以在网上找到有关它的详细信息 documentation。
列出图片
感谢 LundinCast 的回答,我使用 us.gcr.io 作为主机名,我能够这样做:
$ gcloud container images list --repository=us.gcr.io/GCP_PROJECT_ID
NAME
us.gcr.io/GCP_PROJECT_ID/appengine
显然 AppEngine 使用嵌套存储库:
$ gcloud container images list --repository=us.gcr.io/GCP_PROJECT_ID/appengine
NAME
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t162317
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181113t132223
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181113t150454
us.gcr.io/GCP_PROJECT_ID/appengine/default.20181108t184629
us.gcr.io/GCP_PROJECT_ID/appengine/default.20181108t205831
us.gcr.io/GCP_PROJECT_ID/appengine/DEF.20181113t163644
这并没有像我预期的那样工作:
$ gcloud container images list --repository=us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
Listed 0 items.
相反,我必须这样做:
$ gcloud container images list-tags us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
DIGEST TAGS TIMESTAMP
c8e3797d36b2 latest 2018-11-10T12:57:58
正在删除图像
根据documentation for deleting images,可以删除...
- 由其摘要识别的图像
- 由标签标识的图像,并且它有多个标签
通过(隐式)标签删除图像
当我尝试删除单个版本/标签时,出现提示:
$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
WARNING: Implicit ":latest" tag specified: us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
Digests:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425@sha256:c8e3797d36b27599c91e231afd5521e6a1283319fce5a0fd978b7cdcdb1d4181
Associated tags:
- latest
Tags:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425:latest
This operation will delete the tags and images identified by the
digests above.
Do you want to continue (Y/n)? n
ERROR: (gcloud.container.images.delete) Aborted by user.
这对于编写可以自动删除旧图像的脚本或程序来说有点问题(尽管我可以将 yes 命令通过管道传输到 gcloud container images delete IMAGE
命令);幸运的是,有一个 --quiet
参数可以使用:
$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425 --quiet
WARNING: Implicit ":latest" tag specified: us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
Digests:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425@sha256:c8e3797d36b27599c91e231afd5521e6a1283319fce5a0fd978b7cdcdb1d4181
Associated tags:
- latest
Tags:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425:latest
Deleted [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425:latest].
Deleted [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425@sha256:c8e3797d36b27599c91e231afd5521e6a1283319fce5a0fd978b7cdcdb1d4181].
所以,这奏效了。
正在按摘要删除图片
在另一张图片上重试,使用摘要删除图片的方法:
$ gcloud container images list-tags us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726
DIGEST TAGS TIMESTAMP
4d860e73f85f latest 2018-11-10T15:50:55
惊喜!您不能只使用列出的摘要:
$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@4d860e73f85f
ERROR: (gcloud.container.images.delete) [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@4d860e73f85f] digest must be of the form "sha256:<digest>".
这有点奇怪(只有一个标签,"latest",甚至在错误中都没有显示):
$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85f
ERROR: Tags:
ERROR: (gcloud.container.images.delete) This operation will implicitly delete the tags listed above. Please manually remove with the `untag` command or re-run with --force-delete-tags to confirm.
好的,让我们使用 --force-delete-tags
:
$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85f --force-delete-tags
Digests:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85fdddb485e85dc867653e3e6095a5225f4f670200c98ede10fb542
Associated tags:
- latest
This operation will delete the tags and images identified by the digests above.
Do you want to continue (Y/n)? n
ERROR: (gcloud.container.images.delete) Aborted by user.
和以前一样,让我们使用--quiet
来防止显示提示:
$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85f --force-delete-tags --quiet
Digests:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85fdddb485e85dc867653e3e6095a5225f4f670200c98ede10fb542
Associated tags:
- latest
Deleted [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726:latest].
Deleted [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85fdddb485e85dc867653e3e6095a5225f4f670200c98ede10fb542].
因此,按摘要删除需要更冗长的命令行。