LoginSignup
13
11

More than 3 years have passed since last update.

Dockerのプライベートレジストリからimageを削除する方法

Last updated at Posted at 2019-09-12

プライベートリポジトリ(プライベートレジストリ)からイメージを削除する方法を共有します。

コマンドがなくAPIのみの対応なので面倒です。

手順

1:docker registryの準備

環境変数REGISTRY_STORAGE_DELETE_ENABLED=trueにしてdocker registryを起動する

[root@ip-10-0-0-187 ec2-user]# docker run -e REGISTRY_STORAGE_DELETE_ENABLED=true -d -p 5000:5000 --res
try registry:2

8fa11495803de7c8ea6315da2adf407db4c7927d6de9ced098c540f9c176d6ac

すでにどこかで建てている方は、環境変数を有効化して再起動してください。

2:コンテナをregistryにpushする

あくまでおいている作業なのでスキップしてください。

[root@ip-10-0-0-187 ec2-user]# docker push localhost:5000/os:latest
The push refers to repository [localhost:5000/os]
03901b4a2ea8: Pushed 
latest: digest: sha256:acd3ca9941a85e8ed16515bfc5328e4e2f8c128caa72959a58a127b7801ee01f size: 528
[root@ip-10-0-0-187 ec2-user]# 
[root@ip-10-0-0-187 ec2-user]# 

確認する

[root@ip-10-0-0-187 ec2-user]# curl -X GET localhost:5000/v2/os/manifests/latest
{
   "schemaVersion": 1,
   "name": "os",
   "tag": "latest",
   "architecture": "amd64",
   "fsLayers": [
      {
         "blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
      },
      {
         "blobSum": "sha256:9d48c3bd43c520dc2784e868a780e976b207cbf493eaff8c6596eb871cbd9609"
      }
   ],
   "history": [
      {
         "v1Compatibility": "{\"architecture\":\"amd64\",\"config\":{\"Hostname\":\"\",\"Domainname\":\chStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"Tty\":false,\"OpenStdin\":false,\"StdinPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"],\"Cmd\":[\"/bin/sh\"],\"ArgsEscape256:06f4121dff4d0123ce11bd2e44f48da9ba9ddcd23ae376ea1f363f63ea0849b5\",\"Volumes\":null,\"WorkingDir\":,\"OnBuild\":null,\"Labels\":null},\"container\":\"0a80155a31551fcc1a36fccbbda79fcd3f0b1c7d270653d00310er_config\":{\"Hostname\":\"0a80155a3155\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AtachStderr\":false,\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":[\"PATH=/usr/local/sbinn:/usr/bin:/sbin:/bin\"],\"Cmd\":[\"/bin/sh\",\"-c\",\"#(nop) \",\"CMD [\\\"/bin/sh\\\"]\"],\"ArgsEscapa256:06f4121dff4d0123ce11bd2e44f48da9ba9ddcd23ae376ea1f363f63ea0849b5\",\"Volumes\":null,\"WorkingDir\"l,\"OnBuild\":null,\"Labels\":{}},\"created\":\"2019-08-20T20:19:55.211423266Z\",\"docker_version\":\"150dd72f8902b1b7d3128ad4b9f79e6b185216bcddd0fa930f13aff6b68764\",\"os\":\"linux\",\"parent\":\"0e440b6eff734b53c70d903ee0f129d67d450365\",\"throwaway\":true}"
      },
      {
         "v1Compatibility": "{\"id\":\"0e440b6ef9db5adec4ee95f637eed3440f734b53c70d903ee0f129d67d450365-20T20:19:55.062606894Z\",\"container_config\":{\"Cmd\":[\"/bin/sh -c #(nop) ADD file:fe64057fbb83dccb97fa8dbca0a8801c651bdf7c in / \"]}}"
      }
   ],
   "signatures": [
      {
         "header": {
            "jwk": {
               "crv": "P-256",
               "kid": "BZZG:ACYI:CQZW:TJEG:TILZ:KLV2:ONVK:HSLZ:5HM7:GK2X:PFUV:ZE2N",
               "kty": "EC",
               "x": "Dxj9qI1YlOPTxM9nrVXA9yjt38ZlHQ-AY_Gmb-sKRRo",
               "y": "9eeU57WRdH63-Qfw9O6Oqc8eadG1JWO-TfHnfTGH4j0"
            },
            "alg": "ES256"
         },
         "signature": "Kjl6JOKqxtWb5_lJP6-8B9P-6hEUwmI6R-KB_yD9qhzgWtQQXufMkM6opj0MdPQb9QLmsksff6XKinEe
         "protected": "eyJmb3JtYXRMZW5ndGgiOjIxMjksImZvcm1hdFRhaWwiOiJDbjAiLCJ0aW1lIjoiMjAxOS0wOS0xMlQw
      }
   ]
}

3:削除したいimageのdigestを取得する

参考:https://github.com/docker/distribution/issues/1579

[root@ip-10-0-0-187 ec2-user]# curl -i -H "Accept: application/vnd.docker.distribution.manifest.v2+json" localhost:5000/v2/os/m
anifests/latest

HTTP/1.1 200 OK
Content-Length: 528
Content-Type: application/vnd.docker.distribution.manifest.v2+json
Docker-Content-Digest: sha256:acd3ca9941a85e8ed16515bfc5328e4e2f8c128caa72959a58a127b7801ee01f
Docker-Distribution-Api-Version: registry/2.0
Etag: "sha256:acd3ca9941a85e8ed16515bfc5328e4e2f8c128caa72959a58a127b7801ee01f"
X-Content-Type-Options: nosniff
Date: Thu, 12 Sep 2019 08:46:07 GMT

{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
   "config": {
      "mediaType": "application/vnd.docker.container.image.v1+json",
      "size": 1512,
      "digest": "sha256:961769676411f082461f9ef46626dd7a2d1e2b2a38e6a44364bcbecf51e66dd4"
   },
   "layers": [
      {
         "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
         "size": 2789669,
         "digest": "sha256:9d48c3bd43c520dc2784e868a780e976b207cbf493eaff8c6596eb871cbd9609"
      }
   ]

これが大事です↓
Docker-Content-Digest: sha256:acd3ca9941a85e8ed16515bfc5328e4e2f8c128caa72959a58a127b7801ee01f

4:Docker-Content-Digestヘッダで取得した情報を付与してDELETEする

[root@ip-10-0-0-187 ec2-user]# curl -X DELETE localhost:5000/v2/os/manifests/sha256:acd3ca9941a85e8ed16
515bfc5328e4e2f8c128caa72959a58a127b7801ee01f

確認

[root@ip-10-0-0-187 ec2-user]# curl -X GET localhost:5000/v2/os/manifests/latest
{"errors":[{"code":"MANIFEST_UNKNOWN","message":"manifest unknown","detail":{"Tag":"latest"}}]}
13
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11