Docker
- 一、Docker是什么
- 1.什么是Docker
- 2.Docker特點
- 3.比較虛擬機和容器
- 二、Docker安裝
- 1.Docker??三大核心組件??
- 2.安裝步驟(Ubuntu)
- 3.阿里云鏡像加速
- 三、Docker鏡像
- 1.什么是鏡像
- 2.UnionFS(聯合文件系統)
- 3.Docker鏡像加載原理
- 4.提交容器鏡像
一、Docker是什么
1.什么是Docker
Docker 是一種輕量級的容器化技術??,它允許開發者將應用程序及其所有依賴(如代碼、運行時環境、系統工具、庫等)打包成一個標準化的、可移植的“容器”(Container),并在任何支持 Docker 的平臺上快速部署和運行。
2.Docker特點
-
輕量級與高效性??
??基于容器技術??:與傳統虛擬機(VM)不同,Docker 容器共享宿主機的操作系統內核,無需啟動完整的操作系統,因此??資源占用更少??(MB級 vs. VM的GB級)、??啟動更快??(秒級 vs. VM的分鐘級)。??高性能??:接近原生運行效率,適合高密度部署(如微服務架構)。
-
環境一致性(一次構建,處處運行)??
??鏡像(Image)機制??:將應用及其依賴(如Java/MySQL等)打包成標準化的鏡像,確保??開發、測試、生產環境完全一致??,避免“在我機器上能跑”的問題。??跨平臺運行??:鏡像可在任何支持 Docker 的系統中運行(Linux/Windows/macOS),實現真正的??跨平臺移植??。
-
快速部署與擴展??
??一鍵部署??:通過 docker run命令即可啟動容器,無需手動配置環境,大幅簡化運維。彈性伸縮??:結合 Kubernetes 或 Swarm,可快速擴展容器實例以應對流量高峰。
-
隔離性與安全性??
??進程級隔離??:每個容器擁有獨立的文件系統、網絡和進程空間,通過 Namespaces和 Cgroups實現資源隔離,避免應用間沖突。安全沙箱??:容器內進程無法直接影響宿主機或其他容器(但安全性弱于VM,依賴宿主機內核安全)。
-
微服務與DevOps友好??
??微服務架構??:每個服務可獨立打包為容器,實現模塊化開發和部署。??CI/CD支持??:鏡像版本化管理,無縫集成 Jenkins/GitLab CI 等工具,提升持續交付效率。
-
開源與生態豐富??
??基于Go語言開發??:輕量且高性能,社區活躍。強大工具鏈??:提供 Docker Compose(多容器編排)、Docker Hub(鏡像倉庫)、Kubernetes 集成等生態支持。
3.比較虛擬機和容器
-
??虛擬化層級??
??Docker??:利用宿主機的內核,通過Namespaces和Cgroups隔離進程和資源,??無獨立操作系統??。??VM??:通過Hypervisor(如VMware、KVM)虛擬出CPU、內存等硬件,每個VM需運行完整的Guest OS(如CentOS、Windows)。
-
??資源效率??
??Docker??:多個容器共享宿主機內核,無重復OS開銷,資源利用率高,適合高密度部署。??VM??:每個VM獨占虛擬硬件和OS,資源浪費明顯(例如運行10個VM需啟動10個OS內核)。
-
??啟動速度??
??Docker??:秒級啟動(直接調用宿主機內核)。??VM??:分鐘級啟動(需加載完整OS)。
-
??隔離性與安全性??
??Docker??:進程級隔離,安全性較弱(若宿主機內核漏洞會影響所有容器)。??VM??:硬件級隔離,安全性更強(一個VM被攻破不影響其他VM)。
-
??適用場景??
??Docker??:微服務、CI/CD、快速伸縮、DevOps(追求輕量和效率)。??VM??:強隔離需求(如多租戶云平臺)、運行不同OS的應用(如Windows/Linux混合環境)。
二、Docker安裝
1.Docker??三大核心組件??
Docker 鏡像(Image)?
鏡像是一個??只讀模板??,包含運行應用所需的代碼、運行時環境、庫和配置。
一個鏡像可創建很多個容器。
Docker 容器(Container)
容器是鏡像的??運行實例??,類似于輕量級的虛擬機。每個容器都是相互隔離的、保證安全的平臺。
Docker 倉庫(Registry)?
用于存儲和分發 Docker 鏡像的服務器,類似代碼倉庫。
2.安裝步驟(Ubuntu)
👉戳我可查看官方文檔
(1)卸載舊版本
在安裝 Docker Engine 之前,您需要卸載任何沖突的軟件包。
運行以下命令以卸載所有沖突的包:
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
(2)安裝Docker Engine
①設置 Docker 的存儲庫。apt
# Add Docker's official GPG key:
#更新本地 APT 軟件包索引
sudo apt-get update
#安裝 ca-certificates(用于 HTTPS 連接驗證)和 curl(用于下載文件),確保系統支持安全下載
sudo apt-get install ca-certificates curl
#創建目錄 /etc/apt/keyrings,權限設置為 0755(所有者可讀寫執行,其他用戶可讀執行),用于存儲 GPG 密鑰
sudo install -m 0755 -d /etc/apt/keyrings
#使用 curl下載 Docker 的官方 GPG 密鑰,保存到 /etc/apt/keyrings/docker.asc。
# -fsSL:靜默模式(不顯示進度),跟隨重定向,忽略 SSL 證書錯誤(因已通過 ca-certificates驗證)。
# -o:指定輸出文件路徑。
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
#將密鑰文件權限設置為所有用戶可讀(a+r),確保 APT 可以訪問該密鑰
sudo chmod a+r /etc/apt/keyrings/docker.asc# Add the repository to Apt sources:
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 再次更新 APT 軟件包索引,使新添加的 Docker 軟件源生效。
sudo apt-get update
#外網不能ping通可使用阿里云鏡像倉庫
# 1. 安裝依賴工具
sudo apt-get update
sudo apt-get install -y ca-certificates curl# 2. 添加 Docker 的 GPG 密鑰(阿里云鏡像)
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc# 3. 添加阿里云 Docker CE 鏡像源
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 4. 更新 APT 并安裝 Docker
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
②安裝 Docker 包。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
③通過運行映像來驗證安裝是否成功:hello-world
sudo docker run hello-world
3.阿里云鏡像加速
在 阿里云控制臺 訪問容器鏡像服務,即可打開鏡像加速器。
三、Docker鏡像
1.什么是鏡像
**Docker 鏡像(Image)**?? 是一個??只讀的模板??,包含運行某個應用程序所需的??代碼、運行時環境、依賴庫、環境變量和配置文件??。鏡像是 Docker 容器的靜態基礎,容器則是鏡像的運行實例
2.UnionFS(聯合文件系統)
Union 文件系統(Union File System,簡稱 UnionFS)是一種??分層、輕量級的文件系統??,它將多個??只讀層(read-only layers)??和一個??可寫層(writable layer)??組合成一個單一的文件系統視圖。
底層為只讀層,上層為可寫層,合并視圖為用戶看到的最終文件系統。
在Docker容器中的應用
(1)鏡像分層存儲?
Docker 鏡像由多個??文件系統??組成,每層對應一個 Dockerfile 指令(如 RUN、COPY)。
(2)容器可寫層??
當啟動容器時,Docker 在鏡像的只讀層之上添加一個??可寫層??(容器層)。
所有文件修改(如創建、刪除、更新)均發生在可寫層,不影響鏡像本身。
3.Docker鏡像加載原理
BootFS(內核啟動的必需品)
在 Docker 的鏡像分層架構中,BootFS 是 ??最底層的基礎文件系統??,直接依賴宿主機的 Linux 內核。
內核啟動階段??:BootFS 是 Linux 內核啟動時掛載的??臨時根文件系統??,提供最基本的工具(如 init、modprobe)和驅動,用于加載真正的根文件系統(如 ext4、xfs)。
RootFS
RootFS(Root File System,根文件系統)是 ??Linux 系統啟動后掛載的最終文件系統??,包含操作系統運行所需的??所有用戶空間文件和目錄??(如 /bin、/etc、/usr)。在 Docker 中,RootFS 是 ??鏡像的核心組成部分??,直接決定了容器的運行環境。
BootFS vs. RootFS?
對比項 | BootFS | RootFS |
---|---|---|
用途 | 內核啟動時的臨時文件系統 | 容器/系統的永久根文件系統 |
是否必需 | 傳統 Linux 必需,Docker 容器中省略 | Docker 容器的必需層(如 ubuntu:22.04 ) |
典型內容 | /boot/vmlinuz (內核)、/boot/initrd | /bin 、/etc 、/usr 等用戶空間文件 |
生命周期 | 內核啟動后卸載 | 容器運行時持續存在 |
Docker 鏡像分層的好處?
- 節省存儲空間:多個鏡像可以復用相同的基礎層(如 ubuntu:22.04),避免重復存儲。
- 加速鏡像構建與分發:如果 Dockerfile的某一層未變化(如 RUN apt-get update),直接復用緩存,跳過重復操作。
- 環境一致性:鏡像構建后,每層內容只讀,確保開發、測試、生產環境完全一致。
- 持多階段構建:在最終鏡像中僅保留必要層,丟棄中間層(如編譯工具)。
- 快速容器啟動:容器啟動時直接掛載鏡像的現有層(無需解壓完整文件系統)。
- 安全與審計:每層有唯一的哈希值,確保鏡像內容未被篡改(如 sha256:abcd…)。
4.提交容器鏡像
docker commit
命令用于將 ??正在運行的容器?? 的當前狀態保存為一個 ??新的鏡像??。適用于臨時修改容器后需要持久化的場景(但推薦優先使用 Dockerfile構建鏡像)。
docker commit [OPTIONS] <容器ID或名稱> <新鏡像名>[:標簽]
常用選項
選項 | 說明 |
---|---|
-a 或 --author | 指定鏡像作者(如 -a "Your Name" ) |
-m 或 --message | 添加提交信息(類似 Git commit) |
-p 或 --pause | 在提交時暫停容器(默認行為) |
(1)慎用 docker commit??
提交的鏡像??缺乏透明性??(無法追溯修改步驟),推薦優先使用 Dockerfile構建可復現的鏡像。
提交的鏡像可能包含??冗余文件??(如緩存、臨時文件),導致體積膨脹。
(2)清理無用數據??
提交前建議在容器內清理緩存:
apt-get clean && rm -rf /var/lib/apt/lists/*
與 Dockerfile
對比
方式 | 優勢 | 劣勢 |
---|---|---|
docker commit | 快速保存臨時修改 | 無法版本控制,難以維護 |
Dockerfile | 可復現、易維護、支持自動化構建 | 需手動編寫構建步驟 |