国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

刪除docker-register的鏡像& none無效鏡像講解

wslongchen / 1244人閱讀

摘要:原文排版地址刪除的鏡像無效鏡像講解背景介紹在服務器上搭建了所有的構建鏡像都會集中在一個服務器上,久而久之硬盤就被塞滿了。一是標簽的鏡像,二是刪除物理鏡像。無效的鏡像另一種類型的鏡像是,這種類型會造成磁盤空間占用問題。

原文排版地址:刪除docker-register的鏡像& none無效鏡像講解

背景介紹

在服務器上搭建了docker registry,所有的構建鏡像都會集中在一個服務器上,久而久之硬盤就被塞滿了。本文會著重介紹兩種清理方式。一是標簽的鏡像,二是刪除docker物理鏡像。

docker鏡像
有效的 none 鏡像

為了理解 鏡像,我們先要理解 Docker鏡像系統的工作機制,以及 layers是如何組織起來的。

當我拉取一個stresser鏡像的時候,運行 docker images -a命令,會發現我憑空多出來一個< none>:< none> 鏡像。

?   docker images -a
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
stresser                  latest              68ee9b96793e        9 days ago          242MB
                                  dbcff8952263        9 days ago          242MB

當我要刪除這個< none>鏡像的時候,執行下面的命令,會提示失敗,我要刪除stresser鏡像才能順帶把鏡像刪除。

?   docker rmi dbcff8952263
Error response from daemon: conflict: unable to delete dbcff8952263 (cannot be forced) - image has dependent child images

?   docker rmi 68ee9b96793e
Untagged: stresser:latest
Deleted: sha256:68ee9b96793e0a3b3a77ec713f1bf4eb19446bd13fb933557dc401e452ca04c4
Deleted: sha256:dbcff895226371eba2640c178414f5828aa5e6f417978b63ffa490d3865dc79a
Deleted: sha256:875a0b6d28d1f52fc980a0948055d3ec3a38158ff7aa6a1a2c19c4243b96a57a

?   docker rmi dbcff8952263
Error response from daemon: No such image: dbcff8952263:latest

: 鏡像是干嘛的?我們先看看Docker文件系統的組成,docker鏡像是由很多 layers組成的,每個 layer之間有父子關系,所有的docker文件系統層默認都存儲在/var/lib/docker/graph目錄下,docker稱之為圖層數據庫,在這個例子中 stresser 由兩層(layer)組成,我們可以在/var/lib/docker/graph目錄下找到層。

當我們pull stresser鏡像的時候,最先下載的是 dbcff8952263 < none>父層,接下來才會下載stresser:latest,stresser由兩層組成。
我們可以進入 cat /car/lib/docker/graph/${containerId}/json ,查看鏡像的元數據來了解詳細信息(下面樣例是其他的容器信息)

{"id":"37dd4150474449629e8a7b576eed26cb8583d2fe5a3edf10fd84323dfd538678","parent":"5cf74bcb1bde2e2249824a682f45235954543a5d57081db22c96402342db49e9","created":"2017-04-06T16:28:35.51523979Z","container_config":{"Hostname":"","Domainname":"","User":"","Memory":0,"MemorySwap":0,"CpuShares":0,"Cpuset":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"PortSpecs":null,"ExposedPorts":null,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":["/bin/sh -c set -e; u0009NGINX_GPGKEY=573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62; u0009found=""; u0009for server in u0009u0009ha.pool.sks-keyservers.net u0009u0009hkp://keyserver.ubuntu.com:80 u0009u0009hkp://p80.pool.sks-keyservers.net:80 u0009u0009pgp.mit.edu u0009; do u0009u0009echo "Fetching GPG key $NGINX_GPGKEY from $server"; u0009u0009apt-key adv --keyserver "$server" --keyserver-options timeout=10 --recv-keys "$NGINX_GPGKEY" u0026u0026 found=yes u0026u0026 break; u0009done; u0009test -z "$found" u0026u0026 echo u003eu00262 "error: failed to fetch GPG key $NGINX_GPGKEY" u0026u0026 exit 1; u0009exit 0"],"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"NetworkDisabled":false,"MacAddress":"","OnBuild":null,"Labels":null},"author":"NGINX Docker Maintainers "docker-maint@nginx.com"","Size":4901}

最后做一個總結::鏡像是一種中間鏡像,我們可以使用docker images -a來看到,他們不會造成硬盤空間占用的問題(因為這是鏡像的父層,必須存在的),但是會給我們的判斷帶來迷惑。

無效的 none 鏡像

另一種類型的 < none>:< none> 鏡像是dangling images ,這種類型會造成磁盤空間占用問題。

像Java和Golang這種編程語言都有一個內存區,這個內存區不會關聯任何的代碼。這些語言的垃圾回收系統優先回收這塊區域的空間,將他返回給堆內存,所以這塊內存區對于之后的內存分配是有用的

docker的懸掛(dangling)文件系統與上面的原理類似,他是沒有被使用到的并且不會關聯任何鏡像,因此我們需要一種機制去清理這些懸空鏡像。

我們在上文已經提到了有效的< none>鏡像,他們是一種中間層,那無效的< none>鏡像又是怎么出現的?這些 dangling鏡像主要是我們觸發 docker builddocker pull命令產生的。

用一個例子來講解:

假設我們要構建一個新的鏡像,Dockerfile 文件如下

FORM Ubuntu:latest
RUN echo "hello world"

當我們構建 docker build -t hello-world ./ 的時候,會生成一個新的鏡像。

可是過了一個月之后,Ubuntu發布了新的鏡像,這個時候我們再次構建一個 hello world鏡像,會依賴于最新的 Ubuntu

問題來了,我們引用舊的Ubuntu的hello-world鏡像,這個時候就會成為沒有標簽的 dangling鏡像!使用下面的命令可以清理

docker rmi $(docker images -f "dangling=true" -q)

docker沒有自動垃圾回收處理機制,未來可能會有這方面的改進,但是目前我們只能這樣手動清理(寫個腳本就好)。

刪除本地硬盤的鏡像

當我們registry服務器存在很多tag標簽的鏡像,但是硬盤空間不夠用的時候,我們會希望刪除存量的鏡像給服務器騰出空間,registry自帶了API接口刪除鏡像,但是即使我們調用了,他也只是邏輯層面的刪除,軟刪除(soft delete),只是把二進制和鏡像的關系解除罷了,實際上鏡像一直存在我們的硬盤中,我們需要一種方式徹底物理刪除存量空間。網上有第三方的解決方案:delete-docker-registry-image,接下來列出操作步驟,操作之前先把 registry服務停掉。

安裝:

curl https://raw.githubusercontent.com/burnettk/delete-docker-registry-image/master/delete_docker_registry_image.py | sudo tee /usr/local/bin/delete_docker_registry_image >/dev/null
sudo chmod a+x /usr/local/bin/delete_docker_registry_image

設置環境變量:數據存放地址:

我服務器上registry的配置如下:

  volumes:
    - /root/docker-data/registry/data:/var/lib/registry
root@iZ94ft8hgzqZ:~/docker-data/registry/data/docker/registry/v2/repositories# ls -al
total 108
drwxr-xr-x 27 root root 4096 Aug 21 18:29 .
drwxr-xr-x  4 root root 4096 Oct 30  2015 ..
drwxr-xr-x  5 root root 4096 Mar 27  2016 example
drwxr-xr-x  5 root root 4096 Mar 20 19:25 gitlab_ansible
drwxr-xr-x  5 root root 4096 Mar 22  2016 hlpays-job
drwxr-xr-x  5 root root 4096 Jan 26  2016 hlpays-oa
drwxr-xr-x  5 root root 4096 Mar 24  2016 hlpays-portal
drwxr-xr-x  5 root root 4096 Mar 27 18:32 ifex-crm
export REGISTRY_DATA_DIR=/root/docker-data/registry/data/docker/registry/v2

邏輯刪除:

delete_docker_registry_image --image tickets --dry-run ; 只是邏輯刪除,沒什么用,演示一下而已。。。

root@iZ94ft8hgzqZ:~/docker-data/registry/data/docker/registry/v2/repositories# delete_docker_registry_image --image tickets --dry-run


INFO     [2017-09-13 18:21:04,505]  DRY_RUN: would have deleted /root/docker-data/registry/data/docker/registry/v2/blobs/sha256/27/27dedd9200ff607e76eb9d0e10beb103f53551e4ed39829d767cfbc208b79581
INFO     [2017-09-13 18:21:04,506]  DRY_RUN: would have deleted /root/docker-data/registry/data/docker/registry/v2/blobs/sha256/1b/1b2aade332a7133b1a03cae7695a3dcf9413dd017ff41f35a1bb1506becbacf3

物理數據刪除:

刪除物理內存,能看到硬盤空間已經空出來了。

delete_docker_registry_image --image tickets

df -h    

刪除指定標簽:

delete_docker_registry_image --image testrepo/awesomeimage:supertag

其他用法請參照官網

轉載請注明出處 作者:zhida 來源:paraller"s blog

刪除docker-register的鏡像& none無效鏡像講解

參考網站

What are Docker : images?

delete-docker-registry-image

刪除Docker Registry里的鏡像怎么那么難

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27027.html

相關文章

  • 使用 Etcd 和 Haproxy 做 Docker 服務發現

    摘要:服務發現服務發現被容器處理。主機首先,我們啟動注冊我們的地址是。首先,啟動然后,啟動一個簡單的客戶端容器并傳給它。這時,構造一些請求給服務端口來看他們的負載。同樣地,的事件和容器減輕了服務注冊和使用注冊服務發現比如的困難。 使用 Etcd 和 Haproxy 做 Docker 服務發現 標簽(空格分隔): Etcd Haproxy Docker 服務發現 architecture ...

    caozhijian 評論0 收藏0
  • docker鏡像分析工具dive

    通過可視化分析docker鏡像安裝MacOsbrewinstalldive其他平臺查看官方文檔:https://github.com/wagoodman/dive#installation介紹一般我們查看鏡像可以使用docker inspect命令查看鏡像的信息使用dive <image:tage>來查看一個鏡像,默認tag為latest沒有鏡像則會下載如圖之所示左邊顯示階段和執行的命...

    社區管理員 評論0 收藏0
  • Docker鏡像加速配置

    Docker默認鏡像源在國外,國內下載速度可能略慢,配置國內Docker鏡像源,會大大提高Docker鏡像拉取速度。(1)配置 163 網易鏡像加速器[root@ansible~]#vim/etc/docker/daemon.json { "registry-mirrors":["http://hub-mirror.c.163.com"] }(2)配置...

    社區管理員 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<