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