Docker 容器(一)

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特點

  1. 輕量級與高效性??
    ??基于容器技術??:與傳統虛擬機(VM)不同,Docker 容器共享宿主機的操作系統內核,無需啟動完整的操作系統,因此??資源占用更少??(MB級 vs. VM的GB級)、??啟動更快??(秒級 vs. VM的分鐘級)。

    ??高性能??:接近原生運行效率,適合高密度部署(如微服務架構)。

  2. 環境一致性(一次構建,處處運行)??
    ??鏡像(Image)機制??:將應用及其依賴(如Java/MySQL等)打包成標準化的鏡像,確保??開發、測試、生產環境完全一致??,避免“在我機器上能跑”的問題。

    ??跨平臺運行??:鏡像可在任何支持 Docker 的系統中運行(Linux/Windows/macOS),實現真正的??跨平臺移植??

  3. 快速部署與擴展??
    ??一鍵部署??:通過 docker run命令即可啟動容器,無需手動配置環境,大幅簡化運維。

    彈性伸縮??:結合 Kubernetes 或 Swarm,可快速擴展容器實例以應對流量高峰。

  4. 隔離性與安全性??
    ??進程級隔離??:每個容器擁有獨立的文件系統、網絡和進程空間,通過 Namespaces和 Cgroups實現資源隔離,避免應用間沖突。

    安全沙箱??:容器內進程無法直接影響宿主機或其他容器(但安全性弱于VM,依賴宿主機內核安全)。

  5. 微服務與DevOps友好??
    ??微服務架構??:每個服務可獨立打包為容器,實現模塊化開發和部署。

    ??CI/CD支持??:鏡像版本化管理,無縫集成 Jenkins/GitLab CI 等工具,提升持續交付效率。

  6. 開源與生態豐富??
    ??基于Go語言開發??:輕量且高性能,社區活躍。

    強大工具鏈??:提供 Docker Compose(多容器編排)、Docker Hub(鏡像倉庫)、Kubernetes 集成等生態支持。

3.比較虛擬機和容器

  1. ??虛擬化層級??
    ??Docker??:利用宿主機的內核,通過Namespaces和Cgroups隔離進程和資源,??無獨立操作系統??。

    ??VM??:通過Hypervisor(如VMware、KVM)虛擬出CPU、內存等硬件,每個VM需運行完整的Guest OS(如CentOS、Windows)。

  2. ??資源效率??
    ??Docker??:多個容器共享宿主機內核,無重復OS開銷,資源利用率高,適合高密度部署。

    ??VM??:每個VM獨占虛擬硬件和OS,資源浪費明顯(例如運行10個VM需啟動10個OS內核)。

  3. ??啟動速度??
    ??Docker??:秒級啟動(直接調用宿主機內核)。

    ??VM??:分鐘級啟動(需加載完整OS)。

  4. ??隔離性與安全性??
    ??Docker??:進程級隔離,安全性較弱(若宿主機內核漏洞會影響所有容器)。

    ??VM??:硬件級隔離,安全性更(一個VM被攻破不影響其他VM)。

  5. ??適用場景??
    ??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?

對比項BootFSRootFS
用途內核啟動時的臨時文件系統容器/系統的永久根文件系統
是否必需傳統 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可復現、易維護、支持自動化構建需手動編寫構建步驟

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94302.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94302.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94302.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

容器安全實踐(二):實踐篇 - 從 `Dockerfile` 到 Pod 的權限深耕

在上一篇《容器安全實踐&#xff08;一&#xff09;&#xff1a;概念篇》中&#xff0c;我們深入探討了容器安全的底層原理&#xff0c;并糾正了“容器天生安全”的誤解。我們了解了 root 用戶的雙重身份&#xff0c;以及特權容器的危險性。 然而&#xff0c;僅僅了解這些概念…

c#_數據持久化

數據持久化架構 數據是應用程序的命脈。持久化架構的選擇直接決定了應用的性能、可擴展性、復雜度和維護成本。本章將深入探討.NET生態中主流的數據訪問模式、工具和策略&#xff0c;幫助你為你的系統做出最明智的數據決策。5.1 ORM之爭&#xff1a;Entity Framework Core深度剖…

996引擎-骰子功能

996引擎-骰子功能 測試NPC QF回調函數 結果 參考資料 在測試NPC播放骰子動畫。 播放前需要先設置骰子點數 測試NPC [[骰子的顯示順序和點數 對應 私人變量 D0 D1 D2 D3 D4 D5]] -- NPC入口函數 function main(player)-- 骰子共6個,設置骰子點數后,再執行搖骰子,否則沒動畫…

Vue 3多語言應用開發實戰:vue-i18n深度解析與最佳實踐

&#x1f4d6; 概述 Vue 3 國際化&#xff08;i18n&#xff09;是構建多語言應用的核心需求。本文檔介紹 Vue 3 中實現國際化的主流方案&#xff0c;包括 vue-i18n、Vite 插件方案和自定義解決方案。 &#x1f3af; 主流方案對比 方案優點缺點適用場景vue-i18n功能完整、生態成…

港口船舶流量統計準確率↑27%!陌訊多模態融合算法實戰解析

一、行業痛點&#xff1a;港口船舶流量統計的三大核心難題智慧港口建設中&#xff0c;船舶流量統計是泊位調度、航道管理與安全預警的核心數據支撐&#xff0c;但傳統方案受場景特性限制&#xff0c;長期存在難以解決的技術瓶頸。據《2023 年中國港口智能化發展報告》顯示&…

Shell腳本的基礎知識學習

Shell 腳本是 Linux/Unix 系統的核心自動化工具&#xff0c;能夠完成以下任務&#xff1a; &#xff08;1&#xff09;批量操作&#xff1a;一鍵安裝軟件、批量處理文件&#xff08;重命名、壓縮、備份等&#xff09;。 &#xff08;2&#xff09;系統管理&#xff1a;監控資源…

k8s部署,pod管理,控制器,微服務,集群儲存,集群網絡及調度,集群認證

k8s部署 k8s中容器的管理方式 ? Kubernetes集群創建方式 centainerd 默認情況下&#xff0c;K8S在創建集群時使用的方式 docker docker使用的普記錄最高&#xff0c;雖然K8S在1.24版本后已經費力了kubelet對docker的支持&#xff0c;但時可以借助cri-docker方式來實現集…

JAVA限流方法

在 Java 項目中限制短時間內的頻繁訪問&#xff08;即接口限流&#xff09;&#xff0c;是保護系統資源、防止惡意攻擊或高頻請求導致過載的重要手段。常見實現方案可分為單機限流和分布式限流&#xff0c;以下是具體實現方式&#xff1a;一、核心限流算法無論哪種方案&#xf…

性能比拼: .NET (C#) vs. Fiber (Go)

本內容是對知名性能評測博主 Anton Putra .NET (C#) vs. Fiber (Go): Performance (Latency - Throughput - Saturation - Availability) 內容的翻譯與整理, 有適當刪減, 相關指標和結論以原作為準 在本視頻中&#xff0c;我們將對比 C# 與 .NET 框架和 Golang 的表現。在第一個…

信譽代幣的發行和管理機制是怎樣的?

信譽代幣的發行與管理機制是區塊鏈技術與經濟模型深度融合的產物&#xff0c;其核心在于通過代碼和社區共識構建可量化、可驗證的信任體系。以下從技術架構、經濟模型、治理機制三個維度展開分析&#xff0c;并結合具體案例說明&#xff1a;一、發行機制&#xff1a;行為即價值…

神經網絡|(十二)概率論基礎知識-先驗/后驗/似然概率基本概念

【1】引言 前序學習進程中&#xff0c;對貝葉斯公式曾經有相當粗糙的回歸&#xff0c;實際上如果我們看教科書或者網頁&#xff0c;在講貝葉斯公式的時候&#xff0c;會有幾個名詞反復轟炸&#xff1a;先驗概率、后驗概率、似然概率。 今天就來把它們解讀一下&#xff0c;為以…

使用UE5開發《紅色警戒3》類戰略養成游戲的硬件配置指南

從零開始&#xff0c;學習 虛幻引擎5&#xff08;UE5&#xff09;&#xff0c;開始游戲開發之旅&#xff01;本文章僅提供學習&#xff0c;切勿將其用于不法手段&#xff01;開發類似《紅色警戒3》級別的戰略養成游戲&#xff0c;其硬件需求遠超普通2D或小型3D項目——這類游戲…

Vue2+Vue3前端開發_Day12-Day14_大事件管理系統

參考課程: 【黑馬程序員 Vue2Vue3基礎入門到實戰項目】 [https://www.bilibili.com/video/BV1HV4y1a7n4] ZZHow(ZZHow1024) 項目收獲 Vue3 composition APIPinia / Pinia 持久化處理Element Plus&#xff08;表單校驗&#xff0c;表格處理&#xff0c;組件封裝&#xff09…

[ACTF新生賽2020]明文攻擊

BUUCTF在線評測BUUCTF 是一個 CTF 競賽和訓練平臺&#xff0c;為各位 CTF 選手提供真實賽題在線復現等服務。https://buuoj.cn/challenges#[ACTF%E6%96%B0%E7%94%9F%E8%B5%9B2020]%E6%98%8E%E6%96%87%E6%94%BB%E5%87%BB下載查看&#xff0c;一個壓縮包和一張圖片。壓縮包需要密…

關于日本服務器的三種線路講解

租用日本服務器時&#xff0c;哪種線路選擇更適合?當初次接觸跨境業務的站長們著手租用日本服務器時&#xff0c;會發現不同服務商提供的網絡線路五花八門&#xff0c;從陌生的運營商名稱到復雜的技術參數&#xff0c;常常使其感到眼花繚亂。為了幫助大家理清思路&#xff0c;…

【大白話解析】 OpenZeppelin 的 MerkleProof 庫:Solidity 默克爾證明驗證工具全指南??(附源代碼)

?? 一、Merkle Tree 是什么?為什么要驗證它? 想象你有一個名單,比如: ["Alice", "Bob", "Charlie", "Dave"] 你想讓別人驗證:“我(比如 Alice)是不是在這個名單里?”,但不想把整個名單都放在區塊鏈上(太貴!)。 于是你…

機械學習綜合練習項目

數據集合完整項目文件已經上傳一、項目介紹案例介紹 案例是針對“紅酒.csv”數據集&#xff0c;在紅葡萄酒質量分析的場景 中&#xff0c;利用多元線性回歸來探索紅葡萄酒的不同化學成分如何共同 影響其質量評分。在建立線性回歸模型之后&#xff0c;當給出了紅葡萄酒 的新的一…

第3篇:配置管理的藝術 - 讓框架更靈活

前言 在前一章中&#xff0c;我們設計了強大的注解API。本章將深入探討配置管理系統的設計&#xff0c;學習如何將注解中的聲明式配置轉換為運行時可用的配置對象。 配置管理的核心挑戰 在我們的框架中&#xff0c;配置來源有三個層級&#xff1a;主要挑戰&#xff1a; &#x…

發版混亂怎么規范

你是否經歷過這種場景&#xff1a;臨到發版&#xff0c;一堆功能代碼擠在一起&#xff0c;測試分不清范圍&#xff0c;修復一個Bug可能引發三個新Bug&#xff1f;發布過程像一場豪賭&#xff1f;問題的核心往往在于分支策略和流程的混亂。今天&#xff0c;我們就來建立一套在絕…

【golang長途旅行第30站】channel管道------解決線程競爭的好手

channel 為什么需要channel 使用全局變量加鎖同步來解決goroutine的競爭&#xff0c;可以但不完美難以精確控制等待時間?&#xff08;主線程無法準確知道所有 goroutine 何時完成&#xff09;。全局變量容易引發競態條件?&#xff08;即使加鎖&#xff0c;代碼復雜度也會增加…