[docker基礎一]docker簡介

目錄

一? 消除恐懼

1) 什么是虛擬化,容器化

2)案例

3)為什么需要虛擬化,容器化

?二? 虛擬化實現方式

1)應用程序執行環境分層

2)虛擬化常見類別

3)常見虛擬化實現

一)主機虛擬化(虛擬機)實現

二)容器虛擬化實現


一? 消除恐懼

1) 什么是虛擬化,容器化

總結:虛擬化就是把一臺物理計算機切分成很多邏輯計算機

? ? ? ? ? ?容器化就是虛擬化的一種技術,主要虛擬的是操作系統層面

物理機:實際的服務器或者計算機。相對于虛擬機而言的對實體計算機的稱呼。物理 機提供給虛擬機以硬件環境,有時也稱為“寄主”或“宿主”。

虛擬化:是指通過虛擬化技術將一臺計算機虛擬為多臺邏輯計算機。在一臺計算機上 同時運行多個邏輯計算機,每個邏輯計算機可運行不同的操作系統,并且應用程序都 可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。

容器化:容器化是一種虛擬化技術,又稱操作系統層虛擬化(Operating system level virtualization),這種技術將操作系統內核虛擬化,可以允許用戶空間軟件實例 (instances)被分割成幾個獨立的單元,在內核中運行,而不是只有一個單一實例運 行。這個軟件實例,也被稱為是一個容器(containers)。對每個實例的擁有者與用戶 來說,他們使用的服務器程序,看起來就像是自己專用的。容器技術是虛擬化的一種。 docker 是現今容器技術的事實標準。

2)案例

物理機如下,就像一個莊園,獨立占用了一塊土地,花園都是自己的,其他人無法共 享使用。

虛擬機相當于開發商的一個樓盤,一棟樓一套房子一戶人家,共享一塊宅基地,共享 小區的花園,共享小區的游樂設施。?

容器相當于在 1 個房子里面,開辟出來一個又一個的膠囊公寓,共享這套房子的衛生間、共享廚房、共享 WiFi.只有衣服、電腦等私人物品是你自己的。

3)為什么需要虛擬化,容器化

我們從上面的歷史發展來看,虛擬化和容器化的最主要目的就是資源隔離,隨著資源 隔離的實現逐漸也帶來了更大的收益。

  • 資源利用率高:
  • 將利用率較低的服務器資源進行整合,用更少硬件資源運行更多業務,降低 IT 支出和 運維管理成本。 比如上圖中我們的土地直接復用,使用這塊土地的人多了,但是成本還是莊園那塊地。
  • 環境標準化:
  • 一次構建,隨處執行。實現執行環境的標準化發布,部署和運維。開發過程中一個常 見的問題是環境一致性問題。由于開發環境、測試環境、生產環境不一致,導致有些 bug 并未在開發過程中被發現。而 Docker 的鏡像提供了除內核外完整的運行時環境, 確保了應用運行環境一致性,從而不會再出現 「這段代碼在我機器上沒問題啊」 這類 問題。
  • 資源彈性伸縮:
  • 根據業務情況,動態調整計算、存儲、網絡等硬件及軟件資源。比如遇到雙 11 了,把 服務擴容 100 個,雙 11 過去了, 把擴容的 100 個收回去。
  • 差異化環境提供:
  • 同時提供多套差異化的執行環境,限制環境使用資源。 比如我的服務一個以來 Ubuntu 操作系統,一個服務依賴 CentOS 操作系統,但是沒 有預算購買兩個物理機,這個時候容器化就能很好的提供多種不同的環境。
  • 沙箱安全:
  • 為避免不安全或不穩定軟件對系統安全性、穩定性造成影響,可使用虛擬化技術構建 虛擬執行環境。 比如我在容器里面執行 rm -rf /* 不會把整個服務器搞死,也不影響其他人部署的程序 使用。
  • 容器對比虛擬機更輕量,啟動更快:
  • 傳統的虛擬機技術啟動應用服務往往需要數分鐘,而 Docker 容器應用,由于直接運 行于宿主內核,無需啟動完整的操作系統,因此可以做到秒級、甚至毫秒級的啟動時 間。大大的節約了開發、測試、部署的時間。 docker 不需要虛擬內核,所以啟動可以更快,相當于 windows 的開機時間省去了。
  • 維護和擴展容易:
  • Docker 使用的分層存儲以及鏡像的技術,使得應用重復部分的復用更為容易,也使得 應用的維護更新更加簡單,基于基礎鏡像進一步擴展鏡像也變得非常簡單。此外, Docker 團隊同各個開源項目團隊一起維護了一大批高質量的 官方鏡像,既可以直接 在生產環境使用,又可以作為基礎進一步定制,大大的降低了應用服務的鏡像制作成 本。比如 docker hub 提供了很多鏡像,各個系統的一個命令就可以拿到了,研發也可 以自己定制鏡像分享給各個產品。

?二? 虛擬化實現方式

1)應用程序執行環境分層

硬件層:提供硬件抽象,包括指令集架構、硬件設備及硬件訪問接口

操作系統層 :提供系統調用接口,管理硬件資源

程序庫層:提供數據結構定義及函數調用接口

2)虛擬化常見類別

1)虛擬機(相當于硬件層,給上邊幾層提供服務)

存在于硬件層和操作系統層間的虛擬化技術。虛擬機通過“偽造”一個硬件抽象接口, 將一個操作系統以及操作系統層以上的層嫁接到硬件上,實現和真實物理機幾乎一樣 的功能。比如我們在一臺 Windows 系統的電腦上使用 Android 虛擬機,就能夠用這臺 電腦打開 Android 系統上的應用。

2)容器(相當于操作系統層)

存在于操作系統層和函數庫層之間的虛擬化技術。容器通過“偽造”操作系統的接口, 將函數庫層以上的功能置于操作系統上。以 Docker 為例,其就是一個基于 Linux 操作 系統的 Namespace 和 Cgroup 功能實現的隔離容器,可以模擬操作系統的功能。簡單 來說,如果虛擬機是把整個操作系統封裝隔離,從而實現跨平臺應用的話,那么容器 則是把一個個應用單獨封裝隔離,從而實現跨平臺應用。所以容器體積比虛擬機小很多,理論上占用資源更少。容器化就是應用程序級別的虛擬化技術。容器提供了將應 用程序的代碼、運行時、系統工具、系統庫和配置打包到一個實例中的標準方法。容 器共享一個內核(操作系統),它安裝在硬件上。

3)JVM 之類的虛擬機(相當于函數庫層)

存在于函數庫層和應用程序之間的虛擬化技術。Java 虛擬機同樣具有跨平臺特性,所 謂跨平臺特性實際上也就是虛擬化的功勞。我們知道 Java 語言是調用操作系統函數庫 的,JVM 就是在應用層與函數庫層之間建立一個抽象層,對下通過不同的版本適應不 同的操作系統函數庫,對上提供統一的運行環境交給程序和開發者,使開發者能夠調 用不同操作系統的函數庫。

3)常見虛擬化實現

一)主機虛擬化(虛擬機)實現

主機虛擬化的原理是通過在物理服務器上安裝一個虛擬化層來實現。這個虛擬化層可 以在物理服務器和客戶操作系統之間建立虛擬機,使得它們可以獨立運行。 從軟件框架的角度上,根據虛擬化層是直接位于硬件之上還是在一個宿主操作系統之 上,將虛擬化劃分為 Type1 和 Type2. Type1 類的 Hypervisor(Hypervisor 是一種系統軟件,它充當計算機硬件和虛擬機之間 的中介,負責有效地分配和利用由各個虛擬機使用的硬件資源,這些虛擬機在物理主 機上單獨工作,因此,Hypervisor 也稱為虛擬機管理器。)直接運行在硬件之上,沒有 宿主機操作系統,Hypervisor 直接控制硬件資源和客戶機。典型框架為 Xen、Vmware ESX。

Type2 類的 Hypervisor 運行在一個宿主機操作系統之上(Vmware Workstation)或者 系統里面,Hypervisor 作為宿主機操作系統中的一個應用程序,客戶機就是在宿主機操 作系統上的一個進程。?

二)容器虛擬化實現

容器虛擬化實現原理:

容器虛擬化,有別于主機虛擬化,是操作系統層的虛擬化。通過 namespace 進行各程 序的隔離,加上 cgroups 進行資源的控制,以此來進行虛擬化。

容器虛擬化基礎之 NameSpace:

什么是 Namespace(命名空間)?

namespace 是 Linux 內核用來隔離內核資源的方式。通過 namespace 可以讓一些進 程只能看到與自己相關的一部分資源,而另外一些進程也只能看到與它們自己相關的 資源,這兩撥進程根本就感覺不到對方的存在。具體的實現方式是把一個或多個進程 的相關資源指定在同一個 namespace 中。

Linux namespaces 是對全局系統資源的一種封裝隔離,使得處于不同 namespace 的 進程擁有獨立的全局系統資源,改變一個 namespace 中的系統資源只會影響當前 namespace 里的進程,對其他 namespace 中的進程沒有影響。 Linux 提供了多個 API 用來操作 namespace,它們是 clone()、setns() 和 unshare() 函 數,為了確定隔離的到底是哪項 namespace,在使用這些 API 時,通常需要指定一些 調用參數:CLONE_NEWIPC、CLONE_NEWNET、CLONE_NEWNS、 CLONE_NEWPID、CLONE_NEWUSER、CLONE_NEWUTS 和 CLONE_NEWCGROUP。如果要同時隔離多個 namespace,可以使用 | (按位或)組合 這些參數。

舉個例子:

三年一班的小明和三年二班的小明,雖說他們名字是一樣的,但是所在班級不一樣, 那么,在全年級排行榜上面,即使出現兩個名字一樣的小明,也會通過各自的學號來 區分。對于學校來說,每個班級就相當于是一個命名空間,這個空間的名稱是班級號。 班級號用于描述邏輯上的學生分組信息,至于什么學生分配到 1 班,什么學生分配到 2 班,那就由學校層面來統一調度。

理論講完了,接下來的實戰請看下一篇文章!!!

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

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

相關文章

PostgreSQL 的 pg_advisory_lock 函數

PostgreSQL 的 pg_advisory_lock 函數 pg_advisory_lock 是 PostgreSQL 提供的一種應用級鎖機制,它不鎖定具體的數據庫對象(如表或行),而是通過數字鍵值來協調應用間的并發控制。 鎖的基本概念 PostgreSQL 提供兩種咨詢鎖(advi…

SGLang 實戰介紹 (張量并行 / Qwen3 30B MoE 架構部署)

一、技術背景 隨著大語言模型(LLM)的飛速發展,如何更高效、更靈活地駕馭這些強大的模型生成我們期望的內容,成為了開發者們面臨的重要課題。傳統的通過拼接字符串、管理復雜的狀態和調用 API 的方式,在處理復雜任務時…

微服務中 本地啟動 springboot 無法找到nacos配置 啟動報錯

1. 此處的環境變量需要匹配nacos中yml配置文件名的后綴 對于粗心的小伙伴在切換【測試】【開發】環境的nacos使用時會因為這里導致項目總是無法啟動成功

Lua從字符串動態構建函數

在 Lua 中,你可以通過 load 或 loadstring(Lua 5.1)函數從字符串動態構建函數。以下是一個示例: 示例 1:基本動態函數構建 -- 動態構建一個函數 local funcStr "return function(a, b) return a b end"-…

【Python】?Python單元測試框架unittest總結

1. 本期主題:Python單元測試框架unittest詳解 unittest是Python內置的單元測試框架,遵循Java JUnit的"測試驅動開發"(TDD)理念,通過繼承TestCase類實現測試用例的模塊化組織。本文聚焦于獨立測試腳本的編寫…

【Python 實戰】---- 使用Python批量將 .ncm 格式的音頻文件轉換為 .mp3 格式

1. 前言 .ncm 格式是網易云音樂專屬的加密音頻格式,用于保護版權。這種格式無法直接播放,需要解密后才能轉換為常見的音頻格式。本文將介紹如何使用 Python 批量將 .ncm 格式的音頻文件轉換為 .mp3 格式。 2. 安裝 ncmdump ncmdump 是一個專門用于解密 .ncm 文件的工具。它…

Linux 學習筆記2

Linux 學習筆記2 一、定時任務調度操作流程注意事項 二、磁盤分區與管理添加新硬盤流程磁盤管理命令 三、進程管理進程操作命令服務管理(Ubuntu) 四、注意事項 一、定時任務調度 操作流程 創建腳本 vim /path/to/script.sh # 編寫腳本內容設置可執行權…

YOLO目標檢測算法

文章目錄 前言一、目標檢測算法簡介1、傳統目標檢測算法(1)R-CNN算法簡介(2)Fast R-CNN算法簡介(3)Faster R-CNN算法簡介 2、目標檢測中的算法設計范式(1)one-stage(2&am…

【軟件設計師:軟件】20.軟件設計概述

一、軟件設計基本原則 一、軟件設計基本原則 1. 模塊 是指執行某一特定任務的數據結構和程序代碼。 將模塊的接口和功能定義為其外部特性將模塊的局部數據和實現該模塊的程序代碼稱為內部特性。在模塊設計時,最重要的原則就是實現信息隱蔽和模塊獨立。 2 . 信息隱蔽 將每…

軟件工程之面向對象分析深度解析

前文基礎: 1.軟件工程學概述:軟件工程學概述-CSDN博客 2.軟件過程深度解析:軟件過程深度解析-CSDN博客 3.軟件工程之需求分析涉及的圖與工具:軟件工程之需求分析涉及的圖與工具-CSDN博客 4.軟件工程之形式化說明技術深度解…

需求分析階段測試工程師主要做哪些事情

在軟件測試需求分析階段,主要圍繞確定測試范圍、明確測試目標、細化測試內容等方面開展工作,為后續測試計劃的制定、測試用例的設計以及測試執行提供清晰、準確的依據。以下是該階段具體要做的事情: 1. 需求收集與整理 收集需求文檔&#x…

vLLM部署Qwen2-7B模型推理

vllm簡介 vLLM是一個高效的大語言模型推理和部署服務系統,專為大型語言模型的高效執行而設計。它不僅支持多種量化技術以減少模型大小和加速推理過程,還提供了與OpenAI API兼容的服務接口,使得現有的應用程序能夠無縫對接。 一、前提環境 …

【STM32 學習筆記】GPIO輸入與輸出

GPIO詳解 一、GPIO基本概念 GPIO(通用輸入輸出)是微控制器與外部設備交互的核心接口,具有以下特性: 可編程控制輸入/輸出模式支持數字信號的讀取與輸出集成多種保護機制復用功能支持片上外設連接 二、GPIO位結構解析 2.1 保護二…

安科瑞光伏綜自系統在新能源電站中的應用及調度上傳方案研究

摘要 隨著全球對清潔能源需求的不斷增長,光伏發電作為一種可持續的能源解決方案,正迅速發展。光伏綜合自動化系統(綜自系統)在確保光伏電站高效、穩定運行方面起著關鍵作用。本文詳細介紹了安科瑞光伏綜自系統,包括其背…

[python] 函數2-匿名函數

一 匿名函數 格式: 函數名 lambda 形參 : 返回值(表達式) 調用: 結果 函數名(實參) 一般只有一行代碼,他是對def定義函數的一種簡化,只能實現簡單的邏輯 邏輯復雜時不要使用lambda add lambda a,b: ab # a,b就是形參 print(add(2,5)) 1.1 無參數 noargs_func lambda…

深入理解C/C++內存管理:從基礎到高級優化實踐

一、內存區域劃分與基礎管理機制?? ??棧(Stack)?? 棧由系統自動管理,用于存儲函數調用時的局部變量、參數及返回地址。其特點是高效但空間有限(通常1-8MB),遵循后進先出(LIFO)…

kafka 面試總結

Kafka的冪等性是一種機制,確保生產者發送的每條消息在Broker端只被持久化一次,即使生產者因網絡問題等原因重試發送,也不會導致消息重復。 實現原理 生產者ID(PID) 每個生產者實例在初始化時,會被分配一個…

uniapp|實現多終端聊天對話組件、表情選擇、消息發送

基于UniApp框架,實現跨平臺多終端適配的聊天對話組件開發、表情選擇交互設計及消息發送,支持文本與表情混合渲染。 目錄 聊天界面靜態組件實現消息列表布局消息氣泡雙向布局輔助元素定位與樣式靜態數據模擬與擴展性設計表情選擇器靜態模塊浮層實現符號網格排列多端樣式適配方…

LabVIEW超聲波液位計檢定

在工業生產、運輸和存儲等環節,液位計的應用十分廣泛,其中超聲波液位計作為非接觸式液位測量設備備受青睞。然而,傳統立式水槽式液位計檢定裝置存在受建筑高度影響、量程范圍受限、流程耗時長等問題,無法滿足大量程超聲波液位計的…

C++漫步結構與平衡的殿堂:AVL樹

文章目錄 1.AVL樹的概念2.AVL樹的結構3.AVL樹的插入4.AVL樹的旋轉4.1 左單旋4.2 右單旋4.3 右左雙旋4.4 左右雙旋 5.AVL樹的刪除6.AVL樹的高度7.AVL樹的平衡判斷希望讀者們多多三連支持小編會繼續更新你們的鼓勵就是我前進的動力! 二叉搜索樹有其自身的缺陷&#xf…