一般来说,如果是透过GCP官网的介绍方式,透过 docker 指令推送 image 到 GCP Contanier Registry 上,
如果未指定版号推送
$ docker push asia.gcr.io/xxxxxx/darwin-image-testThe push refers to repository [asia.gcr.io/xxxxxx/darwin-image-test]a65ff0f5005b: Pushed 2acf82036f38: Layer already exists 9f65d1d4c869: Layer already exists 0f804d36244d: Layer already exists 9b23c8e1e6f9: Layer already exists ffd3d6313c9b: Layer already exists 9eb82f04c782: Layer already exists latest: digest: sha256:xxxxxx size: 17772acf82036f38: Layer already exists 9f65d1d4c869: Layer already exists 0f804d36244d: Layer already exists 9b23c8e1e6f9: Layer already exists ffd3d6313c9b: Layer already exists 9eb82f04c782: Layer already exists v01: digest: sha256:xxxxxx: 1570
推送完 image 后,检查目前在 GCP Contanier Registry 上的 image 会自带 latest 的 tag
$ gcloud container images list-tags asia.gcr.io/xxxxxx/darwin-image-testDIGEST TAGS TIMESTAMPce95dbb8bbb6 latest 2021-02-28T22:27:23b08ecc9f7997 v01 2021-02-18T03:20:26
不过近日在接触某些专案时,看到以下的 image 清单:
$ gcloud container images list-tags asia.gcr.io/xxxxxx/darwin-image-testDIGEST TAGS TIMESTAMP04465a0bc048 2021-02-28T22:33:14ce95dbb8bbb6 latest 2021-02-28T22:27:23b08ecc9f7997 v01 2021-02-18T03:20:26
04465a0bc048 这个image id 的 tag 是『空白的』、『空白的』、『空白的』
花惹发!正常 docker 推送不是会自带 latest 版号吗 ?
后来探究原因,造成这个现象发生的兇手就是直接在 gcloud 的路径下直接执行 gcloud 里面的 docker 推送所造成的
$ /usr/local/bin/gcloud docker -- push asia.gcr.io/xxxxxx/darwin-image-testWARNING: `gcloud docker` will not be supported for Docker client versions above 18.03.As an alternative, use `gcloud auth configure-docker` to configure `docker` touse `gcloud` as a credential helper, then use `docker` as you would for non-GCRregistries, e.g. `docker pull gcr.io/project-id/my-image`. Add`--verbosity=error` to silence this warning: `gcloud docker--verbosity=error -- pull gcr.io/project-id/my-image`.See: https://cloud.google.com/container-registry/docs/support/deprecation-notices#gcloud-dockerThe push refers to repository [asia.gcr.io/xxxxxx/darwin-image-test]d8e9a7a6fa33: Pushed 2acf82036f38: Layer already exists 9f65d1d4c869: Layer already exists 0f804d36244d: Layer already exists 9b23c8e1e6f9: Layer already exists ffd3d6313c9b: Layer already exists 9eb82f04c782: Layer already exists latest: digest: sha256:xxxxxx size: 1777
如何在 CGP Container Registry 上捞出这些没 tag 的 images 呢?
参考官网教学:
$ gcloud container images list-tags asia.gcr.io/xxxxxx/darwin-image-test --filter="NOT tags:*"DIGEST TAGS TIMESTAMP04465a0bc048 2021-02-28T22:33:14
在现今强调 CI/CD 的潮流下,不管是 docker registry、GitLab、资料库 ...
只要养成良好的习惯,其实可以避开相当多的问题。
以本文 docker image 为例:『在推送image前,永远tag接上git版号 ,那么一来再清docker registry时才不会犹豫不决。另外,即便是测试档也给一个特定的tag例如:test字样,让推上去的image永远迭代掉同一个档案,才不会三不五时就遇到空间爆掉的问题,甚至是看到恐怖的 GCP 使用帐单!