從入門到實戰(zhàn)全面解析Docker鏡像常用命令
作為一位深耕 Java 領(lǐng)域的技術(shù)博主,我深知容器化技術(shù)在現(xiàn)代應(yīng)用開發(fā)中的重要性。Docker 作為容器化技術(shù)的標(biāo)桿工具,其鏡像管理能力是實現(xiàn)高效 CI/CD 流程的核心。今天,我將為大家?guī)?strong>Docker 鏡像常用命令的全方位解析,這份指南幫助你真正掌握 Docker 鏡像管理的核心技能。

一、背景與問題:為什么需要精通 Docker 鏡像命令
在微服務(wù)架構(gòu)盛行的當(dāng)下,Docker 已經(jīng)成為應(yīng)用部署的標(biāo)準(zhǔn)工具鏈。然而,許多開發(fā)者在使用 Docker 時存在以下問題:
- 只知其一不知其二:知道
docker pull但不清楚其背后的注冊表機(jī)制 - 鏡像臃腫問題:構(gòu)建的鏡像動輒數(shù)百 MB,極大影響部署效率
- 版本管理混亂:缺乏有效的鏡像版本控制策略,導(dǎo)致生產(chǎn)環(huán)境問題頻發(fā)
- 安全風(fēng)險:未對鏡像進(jìn)行安全掃描,存在已知漏洞的風(fēng)險
二、Docker 鏡像核心命令詳解

2.1 鏡像基礎(chǔ)管理命令
docker images:查看本地鏡像列表
基本用法:
docker images [OPTIONS] [REPOSITORY[:TAG]]
常用參數(shù):
| 參數(shù) | 說明 |
| -a | 顯示所有鏡像(包括中間層) |
| --digests | 顯示鏡像摘要信息 |
| -f | 過濾鏡像(如 dangling=true) |
| --format | 自定義輸出格式(Go 模板語法) |
實戰(zhàn)示例:
# 以表格形式查看所有 java 鏡像
docker images java --format "table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.Size}}"
# 只顯示鏡像ID和名稱
docker images --format "{{.ID}}: {{.Repository}}"
關(guān)鍵知識點:
- 鏡像 ID 實際是鏡像的 層哈希值,相同的層可以被多個鏡像復(fù)用
- 虛懸鏡像(dangling images):沒有標(biāo)簽的鏡像,通常由鏡像更新產(chǎn)生
- 使用
--digests查看鏡像的簽名摘要(用于安全校驗)
高級用法:
# 查看所有鏡像(包括中間層鏡像) docker images -a # 只顯示鏡像ID(適合腳本處理) docker images -q # 過濾特定鏡像,比如只看 nginx docker images nginx # 顯示更詳細(xì)的信息(含創(chuàng)建時間、容器ID等) docker images --no-trunc
docker tag:為鏡像添加標(biāo)簽
語法:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

典型場景:
1.為本地構(gòu)建的鏡像打上可推送的標(biāo)簽
docker tag my-app:1.0 registry.example.com/my-project/my-app:1.0
2.版本繼承(如從 1.0 到 1.0.1)
docker tag my-app:1.0 my-app:1.0.1
深度解析:
docker tag實際上是創(chuàng)建一個輕量級的指針,不增加磁盤空間占用- 多個標(biāo)簽可以指向同一個鏡像 ID(證明它們共享相同的層)
- 刪除標(biāo)簽不會影響鏡像內(nèi)容,只有當(dāng)所有標(biāo)簽都被刪除時,鏡像才會被清理
2.2 鏡像獲取與推送命令
docker pull:從注冊表獲取鏡像
基礎(chǔ)用法:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
關(guān)鍵參數(shù):
| 選項 | 說明 |
|---|---|
| --all-tags, -a | 拉取倉庫中所有標(biāo)簽 |
| --quiet, -q | 靜默模式,只輸出鏡像ID |
| --platform | 指定平臺架構(gòu)(arm64/x86_64) |
底層原理:
- 首先解析注冊表地址(默認(rèn)
docker.io) - 獲取鏡像清單(manifest)獲取層信息
- 逐層拉取并驗證(使用內(nèi)容尋址存儲)
- 最后組裝成完整鏡像
docker pull nginx
為了提高拉取速度,可以在配置文件中配置國內(nèi)鏡像源:

{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
拉去nginx鏡像:
docker pull nginx

docker push:推送鏡像到注冊表
使用流程:
# 1. 登錄注冊表(首次需要) docker login registry.example.com # 2. 打標(biāo)簽(需要符合注冊表規(guī)范) docker tag local-image:latest registry.example.com/project/image:1.2.3 # 3. 推送鏡像 docker push registry.example.com/project/image:1.2.3
必備條件:
- 鏡像已打上目標(biāo)倉庫的標(biāo)簽;
- 已執(zhí)行
docker login登錄對應(yīng)倉庫; - 倉庫權(quán)限允許推送(尤其私有倉庫需配置 ACL)。
安全實踐:
- 始終使用語義化版本(如 1.2.3 而不是 latest)
- 為敏感倉庫配置基于角色的訪問控制(RBAC)
- 對生產(chǎn)鏡像使用簽名驗證(Notary)
2.3鏡像的導(dǎo)入與導(dǎo)出
docker save/docker load:保存鏡像
語法:
# 保存鏡像 docker save -o my-image.tar my-app:1.2 # 加載鏡像 docker load -i my-image.tar
將指定文件保存至tar歸檔文件

導(dǎo)入使用docker命令導(dǎo)出的鏡像
先刪除原有的鏡像(如果直接load會覆蓋同名鏡像或者忽略)
docker rmi nginx:latest
保證進(jìn)入到tar的文件目錄:
cd /home/ubuntu/test
執(zhí)行:
docker load -i nginx.tar

參數(shù)詳解:
docker save --help Options: -o, --output string 輸出文件路徑(默認(rèn) stdout) -q, --quiet 靜默模式(不顯示進(jìn)度條)
優(yōu)勢:適用于生產(chǎn)環(huán)境鏡像備份、離線部署、內(nèi)網(wǎng)分發(fā)等場景。
docker export/docker import:導(dǎo)入鏡像
從歸檔文件中常創(chuàng)建鏡像,與export搭配使用
docker run -d --name my-nginx nginx:latest docker export -o my-nginx-snapshot.tar my-nginx docker import my-nginx-snapshot.tar my-new-nginx:custom docker images

命令功能對比表
| 方式 | 功能描述 | 是否保留歷史層 | 適用對象 |
|---|---|---|---|
| save/load | 鏡像保存與加載(推薦用于備份鏡像) | ? 是 | 鏡像 |
| export/import | 容器導(dǎo)出與導(dǎo)入(用于遷移容器狀態(tài)) | ? 否 | 容器快照 |
2.4 鏡像構(gòu)建與優(yōu)化命令
docker build:構(gòu)建鏡像
標(biāo)準(zhǔn)構(gòu)建:docker build -t my-app:1.0 -f Dockerfile .
關(guān)鍵優(yōu)化參數(shù):
| 選項 | 說明 |
|---|---|
| -t, --tag | 指定鏡像名稱與標(biāo)簽 |
| -f, --file | 指定 Dockerfile 路徑 |
| --build-arg KEY=VALUE | 設(shè)置構(gòu)建參數(shù) |
| --no-cache | 強(qiáng)制不使用緩存重新構(gòu)建 |
| --squash | 合并所有層(實驗性功能) |
高級實戰(zhàn):
# 多階段構(gòu)建:分離構(gòu)建環(huán)境和運行環(huán)境 docker build -t frontend:prod --target production . # 通過 SSH 連接構(gòu)建(適用于私有依賴) docker build --ssh default=id_rsa -t my-app .
dockerignore:構(gòu)建優(yōu)化關(guān)鍵
典型內(nèi)容:
# 忽略構(gòu)建不需要的文件 **/.git **/node_modules **/*.log **/target **/dist # 但保留必要的配置 !Dockerfile !pom.xml !.mvn
作用原理:
- 類似
.gitignore,阻止不必要的文件進(jìn)入構(gòu)建上下文 - 可減少 30%+ 的構(gòu)建上下文傳輸時間
- 避免敏感文件被意外打包
對比效果:
| 場景 | 是否添加 .dockerignore | 構(gòu)建耗時 | 緩存命中率 |
|---|---|---|---|
| 未加 ignore | ? | 3min | 低 |
| 添加合理 ignore | ? | 1min | 高 |
2.5 鏡像清理與維護(hù)命令
docker rmi:刪除鏡像
docker rmi [OPTIONS] IMAGE [IMAGE...]

安全刪除:
# 刪除指定標(biāo)簽的鏡像(如果無其他標(biāo)簽引用) docker rmi my-app:1.0 # 刪除所有虛懸鏡像(<none>標(biāo)簽) docker rmi $(docker images -f "dangling=true" -q)
docker image prune:智能清理
清理策略:
# 清理未被使用的鏡像(默認(rèn)僅刪除虛懸鏡像) docker image prune # 刪除所有未被容器引用的鏡像(謹(jǐn)慎使用) docker image prune -a

清理效果對比:
| 命令 | 可釋放空間 | 安全性 |
| docker image prune | 5-10% | 安全 |
| docker image prune -a | 20-30% | 較高風(fēng)險 |
docker history查看鏡像歷史信息
docker history [OPTIONS] IMAGE

docker image inspect查看鏡像詳細(xì)信息
docker image inspect [OPTIONS] IMAGE [IMAGE...]
案例:
docker image inspect nginx:latest

三、總結(jié)與進(jìn)階學(xué)習(xí)
Docker鏡像命令庫是Java開發(fā)者必備的核心技能,希望本文能夠幫助你在實際項目中更高效地使用Docker技術(shù)。記住,掌握這些命令只是第一步,更重要的是理解背后的原理和最佳實踐,這樣才能在面對復(fù)雜的生產(chǎn)環(huán)境時游刃有余。
到此這篇關(guān)于從入門到實戰(zhàn)全面解析Docker鏡像常用命令的文章就介紹到這了,更多相關(guān)Docker鏡像常用命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
通過Docker容器部署Python環(huán)境的全流程
在現(xiàn)代化開發(fā)流程中,Docker因其輕量化、環(huán)境隔離和跨平臺一致性的特性,已成為部署Python應(yīng)用的標(biāo)準(zhǔn)工具,本文將詳細(xì)演示如何通過Docker容器化部署Python環(huán)境,涵蓋從基礎(chǔ)鏡像構(gòu)建到生產(chǎn)環(huán)境配置的全流程,需要的朋友可以參考下2025-09-09
Docker數(shù)據(jù)備份恢復(fù)實現(xiàn)過程詳解
這篇文章主要介紹了Docker數(shù)據(jù)備份恢復(fù)實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09
使用Docker部署Spring Boot項目的實現(xiàn)步驟
本文主要介紹了使用Docker部署Spring Boot項目的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12
使用Docker部署Filestash文件管理器的實現(xiàn)步驟
Filestash是一款功能強(qiáng)大的網(wǎng)絡(luò)文件管理工具,它允許用戶在單一界面下管理分布于不同地點和平臺的數(shù)據(jù),本文就來介紹一下Docker部署Filestash文件管理器的實現(xiàn)步驟,感興趣的可以了解一下2025-07-07

