1. 程式人生 > >詳解Docker Registry之刪除映象、垃圾回收

詳解Docker Registry之刪除映象、垃圾回收

來源:https://www.jb51.net/article/111837.htm

本篇文章主要介紹了詳解Docker Registry之刪除映象、垃圾回收,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Docker倉庫在2.1版本中支援了刪除映象的API,但這個刪除操作只會刪除映象元資料,不會刪除層資料。在2.4版本中對這一問題進行了解決,增加了一個垃圾回收命令,刪除未被引用的層資料。本文對這一特性進行了體驗,具體步驟如下。

1、部署映象倉庫

(1)啟動倉庫容器

複製程式碼程式碼如下:
dockerrun -d -v /home/config.yml:/etc/docker/registry/config.yml -p 4000:5000 --nametest_registryregistry:2.4.1

這裡需要說明一點,在啟動倉庫時,需在配置檔案中的storage配置中增加delete=true配置項,允許刪除映象,本次試驗採用如下配置檔案:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

[email protected]:/# cat /home/config.yml

version: 0.1

log:

 fields:

 service: registry

storage:

 delete:

  enabled: true

 

cache:

  blobdescriptor: inmemory

 filesystem:

  rootdirectory: /var/lib/registry

http:

 addr: :5000

 headers:

  X-Content-Type-Options: [nosniff]

health:

 storagedriver:

 enabled: true

 interval: 10s

 threshold: 3

 (2)上傳映象

1

2

3

4

5

6

[email protected]:/home# docker tag centos 10.229.43.217:4000/xcb/centos

[email protected]:/home# docker push 10.229.43.217:4000/xcb/centos

Thepushrefersto a repository [10.229.43.217:4000/xcb/centos]

5f70bf18a086: Pushed

4012bfb3d628: Pushed

latest: digest: sha256:5b367dbc03f141bb5246b0dff6d5fc9c83d8b8d363d0962f3b7d344340e458f6 size: 1331

(3)檢視資料進行倉庫容器中,通過du命令檢視大小,可以看到當前倉庫資料大小為61M。

1

2

3

4

[email protected]:~# docker exec -it test_registry /bin/bash

[email protected]:/# du -sch /var/lib/registry

61M .

61M total

2、刪除映象

刪除映象對應的API如下:

1

DELETE /v2/<name>/manifests/<reference>

name:映象名稱

reference: 映象對應sha256值

(1)傳送請求,刪除剛才上傳的映象

1

2

3

4

5

6

7

[email protected]:/home# curl -I -X DELETE http://10.229.43.217:4000/v2/xcb/centos/manifests/sha256:5b367dbc03f141bb5246b0dff6d5fc9c83d8b8d363d0962f3b7d344340e458f6

HTTP/1.1 202 Accepted

Docker-Distribution-Api-Version: registry/2.0

X-Content-Type-Options: nosniff

Date: Wed, 06 Jul 2016 09:24:15 GMT

Content-Length: 0

Content-Type: text/plain; charset=utf-8

(2)檢視資料大小

1

2

3

[email protected]:/var/lib/registry# du -sch

61M .

61M total

可以看到資料大小沒有變化(只刪除了元資料)

3、垃圾回收

(1)進行容器執行垃圾回收命令

命令:

1

registry garbage-collect config.yml

1

2

3

4

5

[email protected]:/var/lib/registry# registry garbage-collect /etc/docker/registry/config.yml

INFO[0000] Deletingblob: /docker/registry/v2/blobs/sha256/96/9687900012707ea43dea8f07a441893903dd642d60668d093c4d4d2c5bedd9eb go.version=go1.6.2 instance.id=4d875a6c-764d-4b2d-a7c2-4e85ec2b9d58

INFO[0000] Deletingblob: /docker/registry/v2/blobs/sha256/a3/a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4 go.version=go1.6.2 instance.id=4d875a6c-764d-4b2d-a7c2-4e85ec2b9d58

INFO[0000] Deletingblob: /docker/registry/v2/blobs/sha256/c3/c3bf6062f354b9af9db4481f24f488da418727673ea76c5162b864e1eea29a4e go.version=go1.6.2 instance.id=4d875a6c-764d-4b2d-a7c2-4e85ec2b9d58

INFO[0000] Deletingblob: /docker/registry/v2/blobs/sha256/5b/5b367dbc03f141bb5246b0dff6d5fc9c83d8b8d363d0962f3b7d344340e458f6 go.version=go1.6.2 instance.id=4d875a6c-764d-4b2d-a7c2-4e85ec2b9d58

(2)檢視資料大小

1

2

3

[email protected]:/var/lib/registry# du -sch           

108K .

108K total

可以看到映象資料已被刪除,從61M變成了108K