【云原生】Docker 詳解(二):Docker 架構及工作原理

Docker 詳解(二):Docker 架構及工作原理

Docker 在運行時分為 Docker 引擎(服務端守護進程) 和 客戶端工具,我們日常使用各種 docker 命令,其實就是在使用 客戶端工具Docker 引擎 進行交互。
在這里插入圖片描述

1.客戶端 Client

Docker 是一個客戶端-服務器(C/S)架構程序。Docker 客戶端只需要向 Docker 服務器或者守護進程發出請求,服務器或者守護進程將完成所有工作并返回結果。Docker 提供了一個命令行工具 Docker 以及一整套 RESTful API。你可以在同一臺宿主機上運行 Docker 守護進程和客戶端,也可以從本地的 Docker 客戶端連接到運行在另一臺宿主機上的遠程 Docker 守護進程。

2.主機 Host(Docker 引擎)

一個物理或者虛擬的機器,用于執行 Docker 守護進程和容器。

3.鏡像 Image

什么是 Docker 鏡像?簡單的理解,Docker 鏡像就是 一個 Linux 的文件系統(Root FileSystem),這個文件系統里面包含可以運行在 Linux 內核的程序以及相應的數據。

通過鏡像啟動一個容器,一個鏡像就是一個可執行的包,其中包括運行應用程序所需要的所有內容:包含代碼、運行時間、庫、環境變量和配置文件等。

Docker 把 App 文件打包成為一個鏡像,并且采用類似多次快照的存儲技術,可以實現:

  • 多個 App 可以共用相同的底層鏡像(初始的操作系統鏡像);
  • App 運行時的 IO 操作和鏡像文件隔離;
  • 通過掛載包含不同配置/數據文件的目錄或者卷(Volume),單個 App 鏡像可以用來運行無數個不同業務的容器。

4.容器 Container

鏡像(Image)和 容器(Container)的關系,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。

5.鏡像分層

Docker 支持通過擴展現有鏡像,創建新的鏡像。實際上,Docker Hub 中 99 % 99\% 99% 的鏡像都是通過在 Base 鏡像中安裝和配置需要的軟件構建出來的。

在這里插入圖片描述
從上圖可以看到,新鏡像是從 Base 鏡像一層一層疊加生成的。每安裝一個軟件,就在現有鏡像的基礎上增加一層。

鏡像分層最大的一個好處就是共享資源。比如說有多個鏡像都從相同的 Base 鏡像構建而來,那么 Docker Host 只需在磁盤上保存一份 Base 鏡像;同時內存中也只需加載一份 Base 鏡像,就可以為所有容器服務了。而且鏡像的每一層都可以被共享。

如果多個容器共享一份基礎鏡像,當某個容器修改了基礎鏡像的內容,比如 /etc 下的文件,這時其他容器的 /etc 是不會被修改的,修改只會被限制在單個容器內。這就是容器 Copy-on-Write 特性。

6.可寫的容器層

當容器啟動時,一個新的可寫層被加載到鏡像的頂部。這一層通常被稱作 容器層容器層 之下的都叫 鏡像層

在這里插入圖片描述
所有對容器的改動,無論添加、刪除、還是修改文件都只會發生在容器層中。只有容器層是可寫的容器層下面的所有鏡像層都是只讀的

鏡像層數量可能會很多,所有鏡像層會聯合在一起組成一個統一的文件系統。如果不同層中有一個相同路徑的文件,比如 /a,上層的 /a 會覆蓋下層的 /a,也就是說用戶只能訪問到上層中的文件 /a。在容器層中,用戶看到的是一個疊加之后的文件系統。

文件操作說明
添加文件在容器中創建文件時,新文件被添加到容器層中。
讀取文件在容器中讀取某個文件時,Docker 會從上往下依次在各鏡像層中查找此文件。一旦找到,立即將其復制到容器層,然后打開并讀入內存。
修改文件在容器中修改已存在的文件時,Docker 會從上往下依次在各鏡像層中查找此文件。一旦找到,立即將其復制到容器層,然后修改之。
刪除文件在容器中刪除文件時,Docker 也是從上往下依次在鏡像層中查找此文件找到 在容器層中記錄下此刪除操作。(只是記錄刪除操作

只有當需要修改時才復制一份數據,這種特性被稱作 Copy-on-Write。可見,容器層保存的是鏡像變化的部分,不會對鏡像本身進行任何修改。

總結下來就是:容器層記錄對鏡像的修改,所有鏡像層都是只讀的,不會被容器修改,所以鏡像可以被多個容器共享。

7.數據卷 Volume

實際上我們的容器就好像是一個簡易版的操作系統,只不過系統中只安裝了我們的程序運行所需要的環境,前邊說到我們的容器是可以刪除的,那如果刪除了,容器中的程序產生的需要持久化的數據怎么辦呢?容器運行的時候我們可以進容器去查看,容器一旦刪除就什么都沒有了。

所以 數據卷 就是來解決這個問題的,是用來 將數據持久化到我們宿主機上,與容器間實現數據共享,簡單的說就是 將宿主機的目錄映射到容器中的目錄,應用程序在容器中的目錄讀寫數據會同步到宿主機上,這樣容器產生的數據就可以持久化了,比如我們的數據庫容器,就可以把數據存儲到我們宿主機上的真實磁盤中。

8.注冊中心 Registry

Docker 用 Registry 來保存用戶構建的鏡像。Registry 分為公共和私有兩種。Docker 公司運營公共的 Registry 叫做 Docker Hub。用戶可以在 Docker Hub 注冊賬號,分享并保存自己的鏡像。

Docker 公司提供了公共的鏡像倉庫 https://hub.docker.com(Docker 稱之為 Repository)提供了龐大的鏡像集合供使用。

一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標簽(Tag);每個標簽對應一個鏡像。

通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標簽對應該軟件的各個版本。我們可以通過 <倉庫名>:<標簽> 的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標簽,將以 latest 作為默認標簽。

9.總結

Docker 官網寫著這樣一句話:Build, Ship, and Run Any App, Anywhere,再結合剛才我們所理解的內容,總結下來就是:一次構建,到處運行

在這里插入圖片描述
此外,Docker 公司提供了公共的鏡像倉庫 https://hub.docker.com(Docker 稱之為 Repository),GitHub connect,自動構建鏡像,大大簡化了應用分發、部署、升級流程。加上 Docker 可以非常方便的建立各種自定義的鏡像文件,這些都是 Docker 成為最流行的容器技術的重要因素。

通過以上這些技術的組合,最后的結果就是:絕大部分應用,開發者都可以通過 docker build 創建鏡像,通過 docker push 上傳鏡像,用戶通過 docker pull 下載鏡像,使用 docker run 運行容器應用。用戶不再需要去關心如何搭建環境,如何安裝,如何解決不同發行版的庫沖突 —— 而且通常不會消耗更多的硬件資源,不會明顯降低性能。

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

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

相關文章

[oneAPI] 手寫數字識別-LSTM

[oneAPI] 手寫數字識別-LSTM 手寫數字識別參數與包加載數據模型訓練過程結果 oneAPI 比賽&#xff1a;https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel DevCloud for oneAPI&#xff1a;https://devcloud.intel.com/oneapi/get_started/aiAnalyticsToolk…

Curson 編輯器

Curson 漢化與vacode一樣 Curson 自帶chat功能 1、快捷鍵ctrlk(代碼中編輯) 2、快捷鍵ctrll 右側打開窗口

為什么hive會出現_HIVE_DEFAULT_PARTITION分區

問題&#xff1a; 為什么hive表中出現_HIVE_DEFAULT_PARTITION分區&#xff1f; 解答&#xff1a; 因為在業務sql中使用的是動態分區&#xff0c;并且hive啟用動態分區時&#xff0c;對于指定的分區鍵如果存在空值時&#xff0c;會對空值部分創建一個默認分區用于存儲該部分…

小程序項目組件的基本應用

宿主環境&#xff1a;程序運行必須依賴的環境 小程序的宿主環境 ---->手機微信(定位、掃碼、支付等) 小程序的通信模型&#xff1a; 渲染層和邏輯層之間的通信(微信客戶端轉發)邏輯層和第三方服務器之間的通信(微信客戶端轉發) 小程序的運行機制&#xff1a; 啟動&#xff1…

c#實現工廠模式

可以使用以下代碼實現C#中的工廠模式&#xff1a; 首先&#xff0c;定義一個接口作為產品的抽象&#xff1a; public interface IProduct {void Operation(); }然后&#xff0c;創建具體的產品類&#xff1a; public class ConcreteProductA : IProduct {public void Operat…

vue基礎知識五:請描述下你對vue生命周期的理解?在created和mounted這兩個生命周期中請求數據有什么區別呢?

一、生命周期是什么 生命周期&#xff08;Life Cycle&#xff09;的概念應用很廣泛&#xff0c;特別是在政治、經濟、環境、技術、社會等諸多領域經常出現&#xff0c;其基本涵義可以通俗地理解為“從搖籃到墳墓”&#xff08;Cradle-to-Grave&#xff09;的整個過程在Vue中實…

41 | 京東商家書籍評論數據分析

京東作為中國領先的電子商務平臺,積累了大量商品評論數據,這些數據蘊含了豐富的信息。通過文本數據分析,我們可以了解用戶對產品的態度、評價的關鍵詞、消費者的需求等,從而有助于商家優化產品和服務,以及消費者作出更明智的購買決策。 本文將詳細闡述如何獲取京東商家評…

Python opennsfw/opennsfw2 圖片/視頻 鑒黃 筆記

nsfw&#xff08; Not Suitable for Work&#xff09;直接翻譯就是 工作的時候不適合看&#xff0c;真文雅 nsfw效果&#xff0c;注意底部的分數 大體流程&#xff0c;輸入圖片/視頻&#xff0c;輸出0-1之間的數字&#xff0c;一般情況下&#xff0c;Scores < 0.2 認為是非…

7zip分卷壓縮

前言 有些項目上傳文件大小有限制 壓縮包大了之后傳輸也會比較慢 解決方案 我們可以利用7zip壓縮工具對文件進行分卷壓縮 利用7zip壓縮工具進行分卷壓縮 查看待壓縮文件大小 壓縮完成之后有300多M&#xff0c;我們用100M去進行分卷壓縮 選擇待壓縮的文件夾&#xff0c;右…

網絡安全 Day30-運維安全項目-容器架構上

容器架構上 1. 什么是容器2. 容器 vs 虛擬機(化) :star::star:3. Docker極速上手指南1&#xff09;使用rpm包安裝docker2) docker下載鏡像加速的配置3) 載入鏡像大禮包&#xff08;老師資料包中有&#xff09; 4. Docker使用案例1&#xff09; 案例01&#xff1a;:star::star::…

《內網穿透》無需公網IP,公網SSH遠程訪問家中的樹莓派

文章目錄 前言 如何通過 SSH 連接到樹莓派步驟1. 在 Raspberry Pi 上啟用 SSH步驟2. 查找樹莓派的 IP 地址步驟3. SSH 到你的樹莓派步驟 4. 在任何地點訪問家中的樹莓派4.1 安裝 Cpolar內網穿透4.2 cpolar進行token認證4.3 配置cpolar服務開機自啟動4.4 查看映射到公網的隧道地…

【JavaEE基礎學習打卡02】是時候了解Java EE了!

目錄 前言一、為什么要學習Java EE二、Java EE規范介紹1.什么是規范&#xff1f;2.什么是Java EE規范&#xff1f;3.Java EE版本 三、Java EE應用程序模型1.模型前置說明2.模型具體說明 總結 前言 &#x1f4dc; 本系列教程適用于 Java Web 初學者、愛好者&#xff0c;小白白。…

java接口導出csv

1、背景介紹 項目中需要導出數據質檢結果&#xff0c;本來使用Excel&#xff0c;但是質檢結果數據行數過多&#xff0c;導致用hutool報錯&#xff0c;因此轉為導出csv格式數據。 2、參考文檔 https://blog.csdn.net/ityqing/article/details/127879556 工程環境&#xff1a;…

Redis-分布式鎖!

分布式鎖&#xff0c;顧名思義&#xff0c;分布式鎖就是分布式場景下的鎖&#xff0c;比如多臺不同機器上的進程&#xff0c;去競爭同一項資源&#xff0c;就是分布式鎖。 分布式鎖特性 互斥性:鎖的目的是獲取資源的使用權&#xff0c;所以只讓一個競爭者持有鎖&#xff0c;這…

PyTorch: clamp函數與梯度的關系

本文主要以下探究這一點&#xff1a;梯度反向傳播過程中&#xff0c;測試強行修改后的預測結果是否還會傳遞loss&#xff1f; clamp應用場景&#xff1a;在深度學習計算損失函數的過程中&#xff0c;會有這樣一個問題&#xff0c;如果Label是1.0&#xff0c;而預測結果是0.0&a…

【算法】排序+雙指針——leetcode三數之和、四數之和

三數之和 &#xff08;1&#xff09;排序雙指針 算法思路&#xff1a; 和之前的兩數之和類似&#xff0c;我們對暴力枚舉進行了一些優化&#xff0c;利用了排序雙指針的思路&#xff1a; 我們先排序&#xff0c;然后固定?個數 a &#xff0c;接著我們就可以在這個數后面的區間…

Mybatis Plus Interceptor

Mybatis Plus Interceptor 1 獲取表名2 獲取SQL 1 獲取表名 Component public class MybatisInterceptor implements Interceptor {private static final List<String> EXCLUDE_TABLE new ArrayList<>();static {EXCLUDE_TABLE.add("test");}private s…

OpenCV實例(九)基于深度學習的運動目標檢測(一)YOLO運動目標檢測算法

基于深度學習的運動目標檢測&#xff08;一&#xff09; 1.YOLO算法檢測流程2.YOLO算法網絡架構3.網絡訓練模型3.1 訓練策略3.2 代價函數的設定 2012年&#xff0c;隨著深度學習技術的不斷突破&#xff0c;開始興起基于深度學習的目標檢測算法的研究浪潮。 2014年&#xff0c;…

電腦突然黑屏的解決辦法

記錄一次電腦使用問題 問題描述 基本情況&#xff1a;雷神游戲筆記本 windows10操作系統 64位 使用時間 4年 日期&#xff1a;2023年8月11日 當時 電腦充著電 打開了兩個瀏覽器&#xff1a;edge[頁面加載5個左右]&#xff0c;火狐[頁面加載1個左右] 兩個文件夾 一個百度網盤…

Davinci 報表工具 0.3.0-rc release 文本框模糊查詢不生效問題

背景: 在使用過程中發現davinci 的控制器配置中, 取值配置的對應關系設置 包含 或 不包含時 不生效, 不能實現模糊匹配效果, 只能精確查詢; 問題分析: 通過跟蹤接口及相應代碼, 發現在sql 拼接時沒有對 like 和 not like 類型的值兩側添加百分號, 導致模糊查詢失敗 調用過程…