docker垃圾清理方式
一.docker鏡像與容器刪除
docker images #查看所以鏡像 docker ps #查看正在運(yùn)行的容器 docker ps -a #查看所有容器(無(wú)論是否在運(yùn)行) docker ps -a -q #加上-q只顯示id docker stop 容器名或id #停止容器 docker rm 容器名或id #刪除容器 docker rm -f 容器名或id #強(qiáng)制刪除容器 docker rmi 鏡像名加上標(biāo)簽或id #刪除鏡像 docker rmi -f 鏡像名加上標(biāo)簽或id #強(qiáng)制刪除鏡像 docker rmi $(docker images | grep "<none>" ) #使用grep匹配刪除所有為none的容器 docker rmi $(docker images -q) # 要?jiǎng)h除全部image
二.docker磁盤(pán)空間清理
1.使用docker system清理
docker system df命令查看docker占用的磁盤(pán)空間,類(lèi)似linux的df命令
TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 18 6 2.508GB 1.892GB (75%) Containers 19 2 275.8MB 275.8MB (99%) Local Volumes 95 3 140.9kB 140.9kB (100%) Build Cache 0 0 0B 0B
可以看到,Docker鏡像占用了2.5GB磁盤(pán),Docker容器占用了275.8MB磁盤(pán),Docker數(shù)據(jù)卷占用了一點(diǎn)磁盤(pán)。
- docker system prune命令可以用于清理磁盤(pán),刪除關(guān)閉的容器、無(wú)用的數(shù)據(jù)卷和網(wǎng)絡(luò),以及dangling鏡像(即無(wú)tag的鏡像)。
- docker system prune -a命令清理得更加徹底,可以將沒(méi)有容器使用Docker鏡像都刪掉。這個(gè)很危險(xiǎn),一般不用
2. 手動(dòng)清理Docker鏡像/容器/數(shù)據(jù)卷
對(duì)于舊版的Docker(版本1.13之前),是沒(méi)有docker system命令的
對(duì)于docker而言,一點(diǎn)點(diǎn)的容器鏡像空間是沒(méi)有多少的,日志是大頭
所以刪除日志才是王道(刪之前要考慮清楚哦)
在linux上,Docker的所有相關(guān)文件,包括鏡像、容器等一般都保存在/var/lib/docker/目錄中:
使用du命令查看占用
du -hs /var/lib/docker/ 3.4G /var/lib/docker/
剛建立不是很多,但是還是有點(diǎn)大的
使用du命令繼續(xù)查看,可以定位到真正占用這么多磁盤(pán)的目錄
3.4G /var/lib/docker/overlay2
發(fā)現(xiàn)是overlay2占用的,overlay2 是 Docker 默認(rèn)的存儲(chǔ)驅(qū)動(dòng)之一,主要用于管理容器的文件系統(tǒng)層(Layer)
它存儲(chǔ)的是 鏡像層和容器層的數(shù)據(jù),這個(gè)一般不直接清理,通過(guò)刪除容器和鏡像清理
但是上次在云服務(wù)器上有個(gè)服務(wù)宕機(jī)了,一查發(fā)現(xiàn)是空間不夠?qū)е聰?shù)據(jù)庫(kù)連不上,趕緊釋放了一些資源
后面發(fā)現(xiàn)是/var/lib/docker/containers占了200多G
發(fā)現(xiàn)是一個(gè)比賽平臺(tái)的日志占用了190多G這就對(duì)了,每天請(qǐng)求這么多,日志不多才怪
使用truncate命令,可以將容器的日志文件“清零”:
truncate -s 0 /var/lib/docker/containers/容器id/*-json.log
當(dāng)然,這個(gè)命令只是臨時(shí)有作用,日志文件遲早又會(huì)漲回來(lái)。要從根本上解決問(wèn)題,需要限制容器的日志文件大小。這個(gè)可以通過(guò)配置日志的max-size來(lái)實(shí)現(xiàn),可以通過(guò)容器的docker-compose配置文件我是gzctf平臺(tái),為 gzctf 和 db 服務(wù)添加 logging 配置:
logging: driver: "json-file" options: max-size: "10g" max-file: "3"
重啟容器之后,其日志文件的大小就被限制在30GB,分三個(gè)文件,再也不用擔(dān)心了!
在重啟docker,刷新磁盤(pán)狀態(tài)
三、Docker目錄/var/lib/docker/containers文件太大
Docker在不重建容器的情況下,日志文件默認(rèn)會(huì)一直追加,時(shí)間一長(zhǎng)會(huì)逐漸占滿(mǎn)服務(wù)器的硬盤(pán)的空間,內(nèi)存消耗也會(huì)一直增加,我們要加以控制
1. 查出占用磁盤(pán)較大的文件
Docker 的日志文件存在 /var/lib/docker/containers 目錄中,通過(guò)下面的命令可以將日志文件夾根據(jù)升序的方式羅列出來(lái)。
sudo du -d1 -h /var/lib/docker/containers | sort -h
2. 清理單個(gè)文件
感覺(jué)哪個(gè)容器的日志太大就清理哪個(gè)
sudo sh -c "cat /dev/null > 文件的決定地址"
這只是臨時(shí)解決的方式,最好是創(chuàng)建容器時(shí)就控制日志的大小.
啟動(dòng)容器時(shí),我們可以通過(guò)參數(shù)來(lái)控制日志的文件個(gè)數(shù)和單個(gè)文件的大小
# max-size 最大數(shù)值 # max-file 最大日志數(shù) $ docker run -it --log-opt max-size=10g --log-opt max-file=3 redis #在dockerfile目錄內(nèi)
一兩個(gè)容器還好,但是如果有很多容器需要管理,這樣就很不方便了,最好還是可以統(tǒng)一管理
3. 全局配置
創(chuàng)建或修改文件 /etc/docker/daemon.json,并增加以下配置
{ "log-driver":"json-file", "log-opts":{ "max-size" :"50m","max-file":"1" } }
這個(gè)配置是用于 Docker 日志驅(qū)動(dòng)及日志選項(xiàng)的設(shè)置,主要功能是控制 Docker 容器日志文件的生成方式和大小限制,下面詳細(xì)解釋各部分含義:
整體作用:
此配置一般會(huì)放在 /etc/docker/daemon.json
文件里,屬于 Docker 守護(hù)進(jìn)程的全局配置,對(duì)新創(chuàng)建的容器生效。其目的是規(guī)范容器日志的存儲(chǔ)格式、大小以及文件數(shù)量,防止日志文件過(guò)度占用磁盤(pán)空間。
具體配置項(xiàng)解釋?zhuān)?/strong>
1. "log-driver":"json-file"
log-driver
指的是 Docker 采用的日志驅(qū)動(dòng)類(lèi)型。日志驅(qū)動(dòng)決定了容器日志的存儲(chǔ)和輸出方式。json-file
表示使用 JSON 文件作為日志存儲(chǔ)格式。當(dāng)容器產(chǎn)生日志時(shí),日志內(nèi)容會(huì)以 JSON 格式記錄到文件中,每個(gè)日志條目是一個(gè) JSON 對(duì)象,包含時(shí)間戳、日志級(jí)別、日志消息等信息。這種格式便于機(jī)器解析和處理日志數(shù)據(jù)。
2. "log-opts"
log-opts
是日志驅(qū)動(dòng)的具體選項(xiàng),用來(lái)進(jìn)一步配置日志的存儲(chǔ)和管理規(guī)則。
3. "max-size" :"50m"
max-size
定義了單個(gè)日志文件的最大大小。這里設(shè)置為"50m"
,即 50MB。- 當(dāng)單個(gè)日志文件達(dá)到 50MB 時(shí),Docker 會(huì)自動(dòng)創(chuàng)建一個(gè)新的日志文件繼續(xù)記錄日志,以此避免單個(gè)日志文件過(guò)大。
4. "max-file":"1"
max-file
規(guī)定了日志文件的最大數(shù)量。這里設(shè)置為"1"
,意味著最多只保留 1 個(gè)日志文件。- 當(dāng)新的日志文件創(chuàng)建后,舊的日志文件會(huì)被自動(dòng)刪除,以保證日志文件數(shù)量不超過(guò)設(shè)定值。結(jié)合
max-size
為 50MB 和max-file
為 1 的設(shè)置,容器日志文件占用的磁盤(pán)空間最大不會(huì)超過(guò) 50MB。
示例總結(jié):
該配置使得 Docker 容器的日志以 JSON 文件格式存儲(chǔ),每個(gè)日志文件最大為 50MB,并且最多只保留 1 個(gè)日志文件。這樣做能有效控制容器日志占用的磁盤(pán)空間,防止因日志文件不斷增長(zhǎng)而耗盡磁盤(pán)資源。不過(guò)要注意,此配置對(duì)已經(jīng)存在的容器不會(huì)生效,只有新創(chuàng)建的容器才會(huì)遵循這些規(guī)則。
隨后重啟 Docker 服務(wù)
sudo systemctl daemon-reload sudo systemctl restart docker
不過(guò)已存在的容器不會(huì)生效,需要重建才可以!
還有
{ "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "registry-mirrors": [ "https://docker.hpcloud.cloud", "https://docker.m.daocloud.io", "https://docker.unsee.tech", "https://docker.1panel.live", "http://mirrors.ustc.edu.cn", "https://docker.chenby.cn", "http://mirror.azure.cn", "https://dockerpull.org", "https://dockerhub.icu", "https://hub.rat.dev" ], "log-driver":"json-file", "log-opts":{ "max-size" :"20m","max-file":"3" } }
這段配置是 Docker 構(gòu)建器(Builder)的垃圾回收(Garbage Collection,GC)相關(guān)配置,通常在 Docker 的配置文件(如 daemon.json
)中使用,下面為你詳細(xì)解釋各部分的含義。
整體功能概述:
此配置主要用于控制 Docker 構(gòu)建過(guò)程中產(chǎn)生的臨時(shí)文件和中間層的垃圾回收機(jī)制,目的是有效管理磁盤(pán)空間,避免構(gòu)建過(guò)程中產(chǎn)生的大量臨時(shí)數(shù)據(jù)占用過(guò)多磁盤(pán)。
具體配置項(xiàng)解釋?zhuān)?/strong>
1."builder"
- 這是一個(gè)頂級(jí)配置項(xiàng),用于對(duì) Docker 構(gòu)建器的各項(xiàng)參數(shù)進(jìn)行設(shè)置。
- 構(gòu)建器負(fù)責(zé)執(zhí)行 Docker 鏡像的構(gòu)建任務(wù),此配置塊中的內(nèi)容會(huì)影響構(gòu)建器在構(gòu)建過(guò)程中的行為。
2."gc"
- 這是
builder
下的子配置項(xiàng),代表垃圾回收(Garbage Collection)相關(guān)的設(shè)置。 - 垃圾回收機(jī)制會(huì)定期清理構(gòu)建過(guò)程中不再需要的臨時(shí)文件和中間層,釋放磁盤(pán)空間。
3."defaultKeepStorage": "20GB"
defaultKeepStorage
定義了在執(zhí)行垃圾回收操作后,構(gòu)建器默認(rèn)保留的磁盤(pán)空間大小。- 這里設(shè)置為
"20GB"
,意味著在進(jìn)行垃圾回收時(shí),構(gòu)建器會(huì)嘗試清理不再使用的臨時(shí)數(shù)據(jù),直到構(gòu)建過(guò)程所占用的磁盤(pán)空間不超過(guò) 20GB。也就是說(shuō),即使有大量可清理的中間層和臨時(shí)文件,構(gòu)建器也會(huì)保留至少 20GB 的磁盤(pán)空間用于后續(xù)的構(gòu)建操作。
4."enabled": true
enabled
是一個(gè)布爾值,用于開(kāi)啟或關(guān)閉構(gòu)建器的垃圾回收功能。- 設(shè)置為
true
表示啟用垃圾回收機(jī)制,構(gòu)建器會(huì)定期檢查并清理不再使用的臨時(shí)數(shù)據(jù);若設(shè)置為false
,則垃圾回收機(jī)制將被禁用,構(gòu)建過(guò)程中產(chǎn)生的臨時(shí)數(shù)據(jù)不會(huì)被自動(dòng)清理,這可能會(huì)導(dǎo)致磁盤(pán)空間被大量占用。
總結(jié)
這段配置開(kāi)啟了 Docker 構(gòu)建器的垃圾回收功能,并規(guī)定在垃圾回收后至少保留 20GB 的磁盤(pán)空間用于構(gòu)建操作。通過(guò)合理配置垃圾回收機(jī)制,可以有效管理磁盤(pán)空間,確保 Docker 構(gòu)建過(guò)程的穩(wěn)定性和高效性。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker compose入門(mén)helloworld的詳細(xì)過(guò)程
docker-compose是基于docker的,所以我們需要先安裝docker才能使用docker-compose,接下來(lái)通過(guò)本文給大家介紹docker compose入門(mén)helloworld的過(guò)程,一起看看吧2021-09-09Docker 容器全部停止的幾種方法實(shí)現(xiàn)
我們需要停止所有的容器時(shí),可以使用一些命令來(lái)實(shí)現(xiàn),本文主要介紹了Docker 容器全部停止的幾種方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08Docker nacos集群部署的實(shí)現(xiàn)
本文將深入探討如何使用Docker來(lái)部署Nacos集群,從而實(shí)現(xiàn)服務(wù)的快速擴(kuò)展、高可用性和可維護(hù)性,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01Docker?安裝Redis?無(wú)法使用配置文件設(shè)置密碼問(wèn)題及解決方法
最近開(kāi)發(fā)需要使用各種組件,如果都到開(kāi)發(fā)機(jī)上安裝,會(huì)占用電腦資源較多,所以使用docker容器來(lái)安裝這些組件,這篇文章主要介紹了Docker安裝Redis無(wú)法使用配置文件設(shè)置密碼問(wèn)題,需要的朋友可以參考下2023-08-08IDEA 通過(guò)docker插件發(fā)布springboot項(xiàng)目的詳細(xì)教程
這篇文章主要介紹了IDEA 通過(guò)docker插件發(fā)布springboot項(xiàng)目的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09Docker部署FastDFS的實(shí)現(xiàn)方法
這篇文章主要介紹了Docker部署FastDFS的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12