欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何刪除docker-register鏡像及none無效鏡像詳解

 更新時(shí)間:2017年09月26日 08:31:55   作者:paraller  
這篇文章主要給大家介紹了關(guān)于如何刪除docker-register鏡像及none無效鏡像的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

背景介紹

我們大家在服務(wù)器上搭建了docker registry,所有的構(gòu)建鏡像都會集中在一個(gè)服務(wù)器上,久而久之硬盤就被塞滿了。本文會著重介紹兩種清理方式。一是<none>標(biāo)簽的鏡像,二是刪除docker物理鏡像。下面話不多說了,來一起看看詳細(xì)的介紹吧。

docker<none>鏡像

有效的 none 鏡像

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

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

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

當(dāng)我要刪除這個(gè)< none>鏡像的時(shí)候,執(zhí)行下面的命令,會提示失敗,我要刪除stresser鏡像才能順帶把<none>鏡像刪除。

➜ 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

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

當(dāng)我們pull stresser鏡像的時(shí)候,最先下載的是 dbcff8952263 < none>父層,接下來才會下載stresser:latest,stresser由兩層組成。 我們可以進(jìn)入 cat /car/lib/docker/graph/${containerId}/json ,查看鏡像的元數(shù)據(jù)來了解詳細(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 \u0009\u0009ha.pool.sks-keyservers.net \u0009\u0009hkp://keyserver.ubuntu.com:80 \u0009\u0009hkp://p80.pool.sks-keyservers.net:80 \u0009\u0009pgp.mit.edu \u0009; do \u0009\u0009echo \"Fetching GPG key $NGINX_GPGKEY from $server\"; \u0009\u0009apt-key adv --keyserver \"$server\" --keyserver-options timeout=10 --recv-keys \"$NGINX_GPGKEY\" \u0026\u0026 found=yes \u0026\u0026 break; \u0009done; \u0009test -z \"$found\" \u0026\u0026 echo \u003e\u00262 \"error: failed to fetch GPG key $NGINX_GPGKEY\" \u0026\u0026 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}

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

無效的 none 鏡像

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

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

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

我們在上文已經(jīng)提到了有效的< none>鏡像,他們是一種中間層,那無效的< none>鏡像又是怎么出現(xiàn)的?這些 dangling鏡像主要是我們觸發(fā) docker build docker pull命令產(chǎn)生的。

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

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

FORM Ubuntu:latest
RUN echo 'hello world'

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

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

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

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

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

刪除本地硬盤的鏡像

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

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)存,能看到硬盤空間已經(jīng)空出來了。

delete_docker_registry_image --image tickets

df -h 

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

delete_docker_registry_image --image testrepo/awesomeimage:supertag

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • docker-compose安裝db2數(shù)據(jù)庫操作

    docker-compose安裝db2數(shù)據(jù)庫操作

    這篇文章主要介紹了docker-compose安裝db2數(shù)據(jù)庫操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 解決docker中ifconfig不可用的問題

    解決docker中ifconfig不可用的問題

    這篇文章主要介紹了解決docker中ifconfig不可用的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Dockerfile 指令 ADD 和 COPY介紹

    Dockerfile 指令 ADD 和 COPY介紹

    ADD指令的功能是將主機(jī)構(gòu)建環(huán)境(上下文)目錄中的文件和目錄、以及一個(gè)URL標(biāo)記的文件 拷貝到鏡像中,COPY指令和ADD指令功能和使用方式類似。只是COPY指令不會做自動解壓工作。本文給大家介紹的非常詳細(xì),需要的朋友參考下
    2017-03-03
  • docker 查詢或獲取私有倉庫(registry)中的鏡像的方法

    docker 查詢或獲取私有倉庫(registry)中的鏡像的方法

    這篇文章主要介紹了docker 查詢或獲取私有倉庫(registry)中的鏡像的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • Docker學(xué)習(xí)筆記之Docker部署Java web系統(tǒng)

    Docker學(xué)習(xí)筆記之Docker部署Java web系統(tǒng)

    這篇文章主要介紹了Docker學(xué)習(xí)筆記之Docker部署Java web系統(tǒng),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • 一文學(xué)會docker?安裝mysql的方法

    一文學(xué)會docker?安裝mysql的方法

    這篇文章主要介紹了docker?安裝?mysql的方法,通過使用docker命令下載mysql接著使用docker命令創(chuàng)建實(shí)例并啟動,對docker?安裝?mysql相關(guān)知識感興趣的朋友一起看看吧
    2022-04-04
  • 如何解決Docker啟動問題docker?is?starting…

    如何解決Docker啟動問題docker?is?starting…

    這篇文章主要給大家介紹了關(guān)于如何解決Docker啟動問題docker?is?starting…的相關(guān)資料,文中通過圖文將解決的過程介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • CentOS7如何修改Docker鏡像默認(rèn)存儲位置

    CentOS7如何修改Docker鏡像默認(rèn)存儲位置

    這篇文章主要介紹了CentOS7如何修改Docker鏡像默認(rèn)存儲位置問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Docker四種網(wǎng)絡(luò)類型原理實(shí)例解析

    Docker四種網(wǎng)絡(luò)類型原理實(shí)例解析

    這篇文章主要介紹了Docker四種網(wǎng)絡(luò)類型原理實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 詳解基于Harbor搭建Docker私有鏡像倉庫

    詳解基于Harbor搭建Docker私有鏡像倉庫

    這篇文章主要介紹了詳解基于Harbor搭建Docker私有鏡像倉庫,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12

最新評論