Docker鏡像大小查看和排序方法小結(jié)
為什么需要關(guān)注 Docker 鏡像大???
在深入技術(shù)細(xì)節(jié)前,讓我們先理解為什么鏡像大小如此重要。Docker 鏡像大小直接影響以下幾個(gè)方面:
- 存儲(chǔ)成本:大型鏡像占用更多磁盤空間,在開發(fā)環(huán)境中可能導(dǎo)致磁盤快速耗盡
- 傳輸效率:鏡像越大,推送(push)和拉取(pull)所需時(shí)間越長(zhǎng)
- 部署速度:容器啟動(dòng)時(shí)間與鏡像大小直接相關(guān)
- 安全性:更大的鏡像通常包含更多不必要的組件,增加了攻擊面
根據(jù) Docker 官方統(tǒng)計(jì),優(yōu)化后的鏡像通??梢詼p少 70%以上的大小,這意味著更快的 CI/CD 流水線和更高效的資源利用。
基礎(chǔ)命令解析:docker images
docker images是查看本地 Docker 鏡像的基礎(chǔ)命令,默認(rèn)輸出如下:
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 1d622ef86b13 2 weeks ago 72.9MB nginx latest 2bdc49f2f8a1 3 weeks ago 142MB
默認(rèn)情況下,鏡像按倉(cāng)庫(kù)名稱排序,而非大小。要獲取更有價(jià)值的信息,我們需要對(duì)輸出進(jìn)行定制。
方法一:簡(jiǎn)單按大小降序排列
docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}" | sort -h -r
這個(gè)命令的核心部分解析:
--format:自定義輸出格式"{{.Size}}\t{{.Repository}}:{{.Tag}}":只顯示大小和完整鏡像名,用制表符分隔sort -h -r:-h表示"human-readable"(人類可讀格式),-r表示逆序(從大到小)
實(shí)際應(yīng)用場(chǎng)景:當(dāng)你需要快速找出哪個(gè)鏡像占用了最多空間時(shí),這個(gè)簡(jiǎn)潔的命令非常有用。
方法二:增強(qiáng)版排序輸出
docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}\t{{.ID}}" | sort -h -r | column -t -s $'\t'
這個(gè)改進(jìn)版本增加了鏡像 ID,并通過column -t美化為表格格式:
{{.ID}}:添加鏡像 ID 列column -t -s $'\t':將制表符分隔的內(nèi)容對(duì)齊為整齊的列
輸出示例:
3.45GB ubuntu:latest 1d622ef86b13 1.89GB nginx:alpine 2bdc49f2f8a1 567MB busybox:latest a84a6faf4a8e
方法三:保留表頭的完整排序方案
docker images --format "table {{.Size}}\t{{.Repository}}:{{.Tag}}" | (read -r; printf "%s\n" "$REPLY"; sort -h -r)
這個(gè)復(fù)雜命令實(shí)現(xiàn)了:
- 使用
table關(guān)鍵字保留表頭 read -r; printf "%s\n" "$REPLY":先讀取并輸出第一行(表頭)- 然后對(duì)剩余內(nèi)容進(jìn)行排序
技術(shù)難點(diǎn)解析:直接對(duì)表頭和數(shù)據(jù)一起排序會(huì)導(dǎo)致表頭出現(xiàn)在奇怪的位置,這個(gè)技巧完美解決了這個(gè)問題。
方法四:跨平臺(tái)兼容方案
某些舊版 Linux 系統(tǒng)可能不支持sort -h參數(shù),可以使用以下替代方案:
docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}" | sed 's/GB/*1024*1024/;s/MB/*1024/;s/KB//' | awk '{printf "%.0f %s\n", $1, $2}' | sort -n -r | awk '{$1=$1/1024; print $1"MB", $2}'
這個(gè)復(fù)雜管道:
- 使用
sed將 GB/MB 轉(zhuǎn)換為 KB awk計(jì)算具體數(shù)值sort -n數(shù)值排序- 最后轉(zhuǎn)換回 MB 顯示
高級(jí)技巧:結(jié)合其他工具深入分析
1. 找出可以刪除的大型鏡像
docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}\t{{.ID}}" | sort -h -r | head -n 5
head -n 5只顯示最大的 5 個(gè)鏡像,便于針對(duì)性清理。
2. 計(jì)算所有鏡像總大小
docker images --format "{{.Size}}" | sed 's/GB/*1024/;s/MB//;s/KB//\/1024/' | awk '{sum+=$1} END {print sum "MB"}'
3. 結(jié)合 grep 過濾特定鏡像
docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}" | sort -h -r | grep -v "<none>"
排除那些沒有標(biāo)簽的中間鏡像。
到此這篇關(guān)于Docker鏡像大小查看和排序方法小結(jié)的文章就介紹到這了,更多相關(guān)Docker鏡像大小排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker network如何創(chuàng)建橋接網(wǎng)絡(luò)
這篇文章主要介紹了docker network如何創(chuàng)建橋接網(wǎng)絡(luò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
CentOS 7.2 下安裝 Docker 1.12.3 版的詳細(xì)方法
這篇文章主要介紹了CentOS 7.2 安裝 Docker 1.12.3 版的相關(guān)資料,本文分步驟給大家介紹了CentOS 7.2 下安裝 Docker 1.12.3 版的詳細(xì)方法,需要的朋友可以參考下2016-11-11
docker如何在一個(gè)容器內(nèi)部署多個(gè)服務(wù)
這篇文章主要介紹了docker如何在一個(gè)容器內(nèi)部署多個(gè)服務(wù),思路是這樣的首先拿到你的httpd,以及你的springBoot,合并他們的Dockerfile,然后打包,然后啟動(dòng)的時(shí)候啟動(dòng)多個(gè)端口(httpd的端口和你服務(wù)的端口),需要的朋友可以參考下2024-01-01
docker操作Permission denied無(wú)權(quán)限的問題解決
我們?nèi)粘P枰猟ocker環(huán)境進(jìn)入容器配置或查看一些文件,本文主要介紹了docker操作Permission denied無(wú)權(quán)限的問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06

