Docker 中卷、容器、鏡像的區(qū)別解析
更新時間:2025年10月22日 09:29:38 作者:nbspzs
本文將Docker的鏡像、容器和卷分別類比為面向?qū)ο缶幊讨械念?、對象和外部存?詳細分析了三者的特性、生命周期和作用,強調(diào)鏡像只讀、容器可寫且臨時、卷用于數(shù)據(jù)持久化,理解三者關(guān)系是Docker學習的關(guān)鍵,感興趣的朋友跟隨小編一起看看吧
?? 核心概念比喻
想象一個面向?qū)ο缶幊痰念惐龋?/strong>
- 鏡像 = 類(模板、藍圖)
- 容器 = 對象(類的實例)
- 卷 = 外部存儲(數(shù)據(jù)庫、文件系統(tǒng))
?? 詳細對比
| 概念 | 說明 | 生命周期 | 讀寫特性 | 類比 |
|---|---|---|---|---|
| 鏡像 | 只讀模板,包含應用和運行環(huán)境 | 持久化存儲 | 只讀 | 軟件安裝包(.exe文件) |
| 容器 | 鏡像的運行實例 | 臨時性,可隨時創(chuàng)建/刪除 | 讀寫層(基于鏡像) | 正在運行的進程 |
| 卷 | 持久化數(shù)據(jù)存儲 | 獨立于容器生命周期 | 讀寫 | 外接硬盤/U盤 |
?? 深入詳解
1.鏡像- 只讀的模板
# Dockerfile - 構(gòu)建鏡像的配方 FROM ubuntu:20.04 COPY app.py /app/ RUN pip install -r requirements.txt CMD ["python", "/app/app.py"]
特性:
- ? 只讀,不可修改
- ? 分層存儲,每層都有唯一哈希
- ? 可共享(通過 Docker Hub)
- ? 可版本控制(標簽)
# 相關(guān)命令 docker images # 查看鏡像 docker pull nginx:latest # 下載鏡像 docker build -t myapp . # 構(gòu)建鏡像 docker rmi <image_id> # 刪除鏡像
2.容器- 運行中的實例
# 基于鏡像創(chuàng)建容器 docker run -d --name my-container nginx:latest
特性:
- ? 可寫(在鏡像基礎上添加讀寫層)
- ? 臨時性(刪除后數(shù)據(jù)丟失)
- ? 隔離性(有自己的文件系統(tǒng)、網(wǎng)絡、進程空間)
- ? 輕量級(共享主機內(nèi)核)
# 容器生命周期 docker run # 創(chuàng)建并啟動 docker start/stop # 啟動/停止 docker exec -it bash # 進入運行中的容器 docker rm # 刪除容器
3.卷- 持久化數(shù)據(jù)
# 創(chuàng)建和使用卷 docker volume create my-volume docker run -v my-volume:/data nginx
特性:
- ? 持久化(獨立于容器)
- ? 可共享(多個容器可掛載同一卷)
- ? 高性能(不經(jīng)過存儲驅(qū)動)
- ? 可備份遷移
# 卷管理 docker volume create # 創(chuàng)建卷 docker volume ls # 列出卷 docker volume inspect # 查看卷詳情 docker volume rm # 刪除卷
?? 實際工作流示例
場景:部署一個 Web 應用
# 1. 獲取鏡像(從Docker Hub) docker pull nginx:1.21 # 2. 創(chuàng)建數(shù)據(jù)卷(持久化存儲) docker volume create app-data # 3. 運行容器(基于鏡像創(chuàng)建實例) docker run -d \ --name web-server \ -v app-data:/usr/share/nginx/html \ -p 80:80 \ nginx:1.21 # 此時: # - nginx:1.21 是鏡像(只讀模板) # - web-server 是容器(運行實例) # - app-data 是卷(持久化存儲網(wǎng)站文件)
?? 數(shù)據(jù)流向圖
鏡像 (只讀)
↓
容器 (讀寫層) ←→ 卷 (持久化數(shù)據(jù))
↓
應用運行狀態(tài)
?? 生命周期關(guān)系

?? 關(guān)鍵區(qū)別總結(jié)
- 持久性:
- 鏡像:永久存在(除非刪除)
- 容器:臨時存在
- 卷:永久存在(用于數(shù)據(jù)持久化)
- 可寫性:
- 鏡像:只讀
- 容器:可寫(但數(shù)據(jù)隨容器刪除而丟失)
- 卷:可寫(數(shù)據(jù)持久化)
- 用途:
- 鏡像:打包應用和環(huán)境
- 容器:運行應用
- 卷:存儲數(shù)據(jù)
?? 最佳實踐
- 鏡像應該盡量小而精簡
- 容器應該是無狀態(tài)的
- 卷用于存儲需要持久化的數(shù)據(jù)
- 重要數(shù)據(jù)永遠不要只存在容器層
理解這三者的關(guān)系是掌握 Docker 的關(guān)鍵!
到此這篇關(guān)于Docker 中卷、容器、鏡像的區(qū)別解析的文章就介紹到這了,更多相關(guān)docker 卷 容器 鏡像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker報錯:OCI?runtime?exec?failed:?exec?failed:?contain
這篇文章主要給大家介紹了關(guān)于Docker報錯:OCI?runtime?exec?failed:?exec?failed:?container_linux.go:380:?starting?container?process的解決方法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2022-07-07

