成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

刪除docker-register的鏡像& none無(wú)效鏡像講解

wslongchen / 1270人閱讀

摘要:原文排版地址刪除的鏡像無(wú)效鏡像講解背景介紹在服務(wù)器上搭建了所有的構(gòu)建鏡像都會(huì)集中在一個(gè)服務(wù)器上,久而久之硬盤(pán)就被塞滿了。一是標(biāo)簽的鏡像,二是刪除物理鏡像。無(wú)效的鏡像另一種類(lèi)型的鏡像是,這種類(lèi)型會(huì)造成磁盤(pán)空間占用問(wèn)題。

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

背景介紹

在服務(wù)器上搭建了docker registry,所有的構(gòu)建鏡像都會(huì)集中在一個(gè)服務(wù)器上,久而久之硬盤(pán)就被塞滿了。本文會(huì)著重介紹兩種清理方式。一是標(biāo)簽的鏡像,二是刪除docker物理鏡像。

docker鏡像
有效的 none 鏡像

為了理解 鏡像,我們先要理解 Docker鏡像系統(tǒng)的工作機(jī)制,以及 layers是如何組織起來(lái)的。

當(dāng)我拉取一個(gè)stresser鏡像的時(shí)候,運(yùn)行 docker images -a命令,會(huì)發(fā)現(xiàn)我憑空多出來(lái)一個(gè)< none>:< none> 鏡像。

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

當(dāng)我要?jiǎng)h除這個(gè)< none>鏡像的時(shí)候,執(zhí)行下面的命令,會(huì)提示失敗,我要?jiǎng)h除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文件系統(tǒng)的組成,docker鏡像是由很多 layers組成的,每個(gè) layer之間有父子關(guān)系,所有的docker文件系統(tǒng)層默認(rèn)都存儲(chǔ)在/var/lib/docker/graph目錄下,docker稱(chēng)之為圖層數(shù)據(jù)庫(kù),在這個(gè)例子中 stresser 由兩層(layer)組成,我們可以在/var/lib/docker/graph目錄下找到層。

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

{"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 "[email protected]"","Size":4901}

最后做一個(gè)總結(jié)::鏡像是一種中間鏡像,我們可以使用docker images -a來(lái)看到,他們不會(huì)造成硬盤(pán)空間占用的問(wèn)題(因?yàn)檫@是鏡像的父層,必須存在的),但是會(huì)給我們的判斷帶來(lái)迷惑。

無(wú)效的 none 鏡像

另一種類(lèi)型的 < none>:< none> 鏡像是dangling images ,這種類(lèi)型會(huì)造成磁盤(pán)空間占用問(wèn)題。

像Java和Golang這種編程語(yǔ)言都有一個(gè)內(nèi)存區(qū),這個(gè)內(nèi)存區(qū)不會(huì)關(guān)聯(lián)任何的代碼。這些語(yǔ)言的垃圾回收系統(tǒng)優(yōu)先回收這塊區(qū)域的空間,將他返回給堆內(nèi)存,所以這塊內(nèi)存區(qū)對(duì)于之后的內(nèi)存分配是有用的

docker的懸掛(dangling)文件系統(tǒng)與上面的原理類(lèi)似,他是沒(méi)有被使用到的并且不會(huì)關(guān)聯(lián)任何鏡像,因此我們需要一種機(jī)制去清理這些懸空鏡像。

我們?cè)谏衔囊呀?jīng)提到了有效的< none>鏡像,他們是一種中間層,那無(wú)效的< none>鏡像又是怎么出現(xiàn)的?這些 dangling鏡像主要是我們觸發(fā) docker builddocker pull命令產(chǎn)生的。

用一個(gè)例子來(lái)講解:

假設(shè)我們要構(gòu)建一個(gè)新的鏡像,Dockerfile 文件如下

FORM Ubuntu:latest
RUN echo "hello world"

當(dāng)我們構(gòu)建 docker build -t hello-world ./ 的時(shí)候,會(huì)生成一個(gè)新的鏡像。

可是過(guò)了一個(gè)月之后,Ubuntu發(fā)布了新的鏡像,這個(gè)時(shí)候我們?cè)俅螛?gòu)建一個(gè) hello world鏡像,會(huì)依賴于最新的 Ubuntu

問(wèn)題來(lái)了,我們引用舊的Ubuntu的hello-world鏡像,這個(gè)時(shí)候就會(huì)成為沒(méi)有標(biāo)簽的 dangling鏡像!使用下面的命令可以清理

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

docker沒(méi)有自動(dòng)垃圾回收處理機(jī)制,未來(lái)可能會(huì)有這方面的改進(jìn),但是目前我們只能這樣手動(dòng)清理(寫(xiě)個(gè)腳本就好)。

刪除本地硬盤(pán)的鏡像

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

安裝:

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

設(shè)置環(huán)境變量:數(shù)據(jù)存放地址:

我服務(wù)器上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 ; 只是邏輯刪除,沒(méi)什么用,演示一下而已。。。

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

物理數(shù)據(jù)刪除:

刪除物理內(nèi)存,能看到硬盤(pán)空間已經(jīng)空出來(lái)了。

delete_docker_registry_image --image tickets

df -h    

刪除指定標(biāo)簽:

delete_docker_registry_image --image testrepo/awesomeimage:supertag

其他用法請(qǐng)參照官網(wǎng)

轉(zhuǎn)載請(qǐng)注明出處 作者:zhida 來(lái)源:paraller"s blog

刪除docker-register的鏡像& none無(wú)效鏡像講解

參考網(wǎng)站

What are Docker : images?

delete-docker-registry-image

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27027.html

相關(guān)文章

  • 使用 Etcd 和 Haproxy 做 Docker 服務(wù)發(fā)現(xiàn)

    摘要:服務(wù)發(fā)現(xiàn)服務(wù)發(fā)現(xiàn)被容器處理。主機(jī)首先,我們啟動(dòng)注冊(cè)我們的地址是。首先,啟動(dòng)然后,啟動(dòng)一個(gè)簡(jiǎn)單的客戶端容器并傳給它。這時(shí),構(gòu)造一些請(qǐng)求給服務(wù)端口來(lái)看他們的負(fù)載。同樣地,的事件和容器減輕了服務(wù)注冊(cè)和使用注冊(cè)服務(wù)發(fā)現(xiàn)比如的困難。 使用 Etcd 和 Haproxy 做 Docker 服務(wù)發(fā)現(xiàn) 標(biāo)簽(空格分隔): Etcd Haproxy Docker 服務(wù)發(fā)現(xiàn) architecture ...

    caozhijian 評(píng)論0 收藏0
  • docker鏡像分析工具dive

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

    社區(qū)管理員 評(píng)論0 收藏0
  • Docker鏡像加速配置

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

    社區(qū)管理員 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<