Docker 使用原理流程

# docker 是如何來的?
a. linux 內核本身支持容器技術,LXC (市面上有很多基于 LXC 開發的容器管理軟件,如創建容器,查看容器,管理容器, docker 作為管理容器的一款代表工具軟件)
b. 容器的作用,
1. 創建獨立的 namespace,一個隔離的環境。
2.以及對資源進行限制,
3.以及容器是直接使用宿主機的硬件配置 (沒有像虛擬化這種資源損耗)

# docker 和容器的關系
1.docker 就是一個對容器增刪改查的一個工具
2.docker 就是基于 golang 語音開發的一款軟件
3.學習使用 docker 時要安裝 golang 環境


# linux 宿主機? centos
宿主機本身有沒有自己的 namespace?

進程
網絡
文件系統

舉例:nginx???? ---pid? 14578
?? ??? ??? ??? ---port 80
?? ??? ??? ??? network 10.0.0.22
?? ??? ??? ?? ?
進程pid->去讀取文件系統
/opt/nginx/sbin/cgifx.17
基于文件跑出來的進程
宿主機有這些的 namespace 資源是有數量,路徑限制的
因此才會有容器,虛擬機等可以實現隔離環境的作用 說白了就是創建獨立的三個 namespace

docker run centos 調用 linux 內核 LXC 容器技術? 實現了創建 centos 容器
docker run nginx -> 調用 linux 內核 LXC 容器技術? -> 實現創建容器


資源隔離?? 作用1
容器 宿主機 網橋 docker0 默認的網段? 172.16.17.0/16
所有容器都用 /opt/nginx-1.17/sbin/nginx 這個文件路徑,他們的文件路徑是不會沖突的

容器1
進程
網絡?? ??? ?172.16.17.2
文件系統?? ?/opt/nginx-1.17/sbin/nginx

容器2
進程
網絡?? ??? ?172.16.17.3
文件系統?? ?/opt/nginx-1.17/sbin/nginx

容器3
進程
網絡?? ??? ?172.16.17.4
文件系統?? ?/opt/nginx-1.17/sbin/nginx

容器4
進程
網絡?? ??? ?172.16.17.5
文件系統?? ?/opt/nginx-1.17/sbin/nginx

#
1.linux 本身支持 LXC 技術 對 linux 內核資源隔離 (提供了兩個技術:namespace 和 cgroup 技術)
2.docker 基于 golang 開發出來了,docker 的作用就是調用 LXC 技術去管理這些容器 如增刪改查
3. 運維,開發基于這些容器去部署這些應用

docker 和 LXC linux容器技術的本質關系,以及我們是如何用的 docker ,以及 docker 資源隔離本質

docker 是管理 LXC linux 容器技術的工具,docker 是用 golang 語言寫的
學習 docker 就需要安裝 golang 環境
用 docker 命令去實現 容器的增刪改查

# docker 工具
容器技術是 linux 系統支持的 名字叫 LXC 容器技術的作用是在操作系統的角度實現資源的隔離與限制,
說白了就是用 LXC 技術去創建獨立的 namespace 命名空間,去區分開進程,網絡,文件系統這樣的一個環境
我們要基于 LXC 技術去創建容器,是很費勁的,有很多其他的容器技術也是去管理 LXC 容器技術 發現他們不好,后來
Docker 公司位于舊金山,原名 dotCloud, 底層利用了 linux 容器技術 (LXC) (在操作系統中實現資源隔離與限制)。為了方便創建和管理這些容器,dotCloud 開發了一些內部工具,之后被命名為"docker".?? ?
Docker 就是這樣誕生的

Docker 對容器的管理,命令非常簡單,主要圍繞 增刪改查 四個角度 的命令去使用
增?? ?創建一個容器
刪?? ?干掉刪除容器記錄(刪除了某一個名稱空間)
改?? ?修改容器內的應用信息以及修改容器的網絡模式等,以及修改容器的名字
查?? ?查詢當前有多少容器進程

# 創建虛機需要你的 cpu 支持這個? Hypervisor 工具
Hypervisor , 一種運行基礎物理服務器和操作系統之間的中間軟件層,可允許多個操作系統和應用共享硬件,常見的 vmware的 workstation,ESXi,微軟的 Hyper-v或者思杰的 XenServer.

#? linux 內核 支持 LXC 容器技術
Container Runtime ,通過 linux 內核虛擬化能力管理多個容器。多個容器共享一套操作系統內核。因此摘掉了內核占用的空間及運行所需要的耗時,使得容器極其輕量與快速。
centos 宿主機 (發行版 + linux 內核(支持 LXC 技術)) 即通過 LXC 技術去增刪改查容器

#
LXC > Libcontainer (創建一個隔離的,獨立的 namespace,也就是容器實例)

docker 的強大在于通過操作系統層面的虛擬化實現進程隔離,因此 docker 容器進程運行后,不需要像虛擬機一樣的一個完整的操作系統。。。

紅帽官網的虛擬化文章
https://www.redhat.com/zh/topics/virtualization
https://www.redhat.com/zh/containers/whats-a-linux-container

維基百科,什么是操作系統虛擬化
https://zh.wikipedia.org/zh-cn/topics/

# 容器技術

-? Docker 最初是 DotCloud 公司在法國期間發起的一個公司內部項目,后來以 Apache 2.0 授權協議開源,代碼在 github 上維護

-? Docker 是基于 Google 公司推出的 Golang 語言開發而來的,基于 Linux 內核的 Cgroups,NameSpace,以及 Union FS 等技術,對進程進行封裝隔離,屬于操作系統層面的虛擬化技術。

-? 由于隔離的進程獨立于宿主機和其他隔離的進程,也被稱之為容器。

-? 最初的 Docker 是基于 LXC ( Linux Containers? 是一種 linux 端 操作系統 級的虛擬化技術,可以實現輕量級容器,每個容器看起來像一個獨立的操作系統,他們共享同一個物理服務器,但是互相隔離。LXC容器比傳統虛擬機更加輕便,高效,且啟動速度快) 的,后來去除 LXC 轉而使用自行開發的 Libcontainer。

-? Docker 被定義為開源的容器引擎,可以方便的對容器進行管理,例如對鏡像打包封裝,引入 Docker Registry 對鏡像統一管理。

-? 利用 Docker 可以實現開發,測試,生產環境的部署一致性,極大的減少運維成本。

舉例分析
宿主機環境
網絡
進程
文件系統等信息
基于 centos7 下載安裝 docker 工具?? ?yum install docker


docker run nginx 命令
# 容器1
基礎鏡像,發行版提供 當執行 docker run nginx 這條命令后,會自動下載 debian 系統(默認下載這個系統)
nginx 程序?? 然后nginx有自己獨立的文件系統
獨立名稱空間
文件系統?? ?/usr/bin/nginx
端口?? ??? ?80
進程?? ??? ?12334


docker 做了什么事情
1.下載鏡像
2.運行程序
3.創建整個容器去跑一個 nginx


容器本質上還是跑在 centos7 上的,因此 容器是 centos7 宿主機上的一個進程而與
在宿主機上可以用 ps ef | grep nginx 看到Nginx這個容器 id 記錄
容器的本質:就是跑在宿主機上的一個進程而與。
容器就是對 xxx 程序的封裝,提供了一個獨立運行的環境 是隔離的環境
比如跑一個 nginx 容器 其實就是對 nginx 程序的封裝

最初是 linux 基于 LXC 去管理容器 后來 docker 這家公司基于 golang 語言對底層容器技術 LXC 創建技術進行二次開發,
基于 golang 寫了一個底層容器驅動,叫 libcontainer? 能夠在宿主機上看到 containeed 進程


# docker 為什么能夠實現多環境的一致性以及快速發布

1.沒有容器的部署環境(centos + ubuntu)
- 開發一般不懂 centos(ubuntu)環境? 2年以內開發的基本不懂 linux 環境
- windows + java 寫源代碼?? 源代碼?? 是基于 windows 環境運行的
- 功能開發 調用的一些驅動都是 windows 環境的
- 你這套源碼,他運行后,要下載很多依賴,都是windods

2.測試環境?? 用 centos 或者 ubuntu
- 源碼寫完了上傳到 gitlab github 測試倉庫下載到測試環境
- 基于 源代碼 運行環境,去安裝一些依賴
- 安裝數據庫等
-保證跑起來之后,調試功能是否有BUG

發現代碼有錯,
求運維?? ?jdk 用什么命令
求開發指導環境參數如何,功能是干嘛的

3.生產環境? 運維 可以手工部署應用 jenkins
- 源碼寫完了上傳到 gitlab github 線上倉庫下載到生產環境
- 單機,
- 單點
- 數據庫 測試數據庫的假數據


# 如今的企業級虛擬機環境? 阿里云 還是私有云,說白了都是虛擬機
環境: 物理機 -> 虛擬化 -> 私有云(阿里云,ESC,機器)->yum install docker->docker run nginx 或者 docker run jenkins 從而實現?? ?nginx容器? jenkins容器

基于虛擬機,源碼,jenkins , 多環境發布?? ?問題: 慢 , 容易出錯
傳統的發布模式只提供源碼?? ?所有環境都是臨時 安裝 的
環境的部署是一個大問題
測試環境 與生產環境又不一樣


# 如何實現環境一致性
開發提供好一個部署物料 不僅有源碼,運行環境直接發給測試,直接發給運維。(運行環境+源碼)

# 沒有容器的發布時代,(基于虛擬機的模板發布)
基于vmware 模板機實現,有一個機器是專門跑 tomcat 這套臺機器提供了穩定的模板基礎,基于這臺機器,克隆出你需要的運行的測試環境,生產環境? 這樣盡量減少環境不一致的問題
虛擬機模板克隆技術是很重量級的 都是 linux 內核一套 + 發行版一套,你安裝的鏡像4-10GB左右 安裝完成之后最少20GB

# 有容器的發布時代?? ?Docker 鏡像 只有軟件運行的依賴環境,只有發行版,你的代碼是基于 centos,ubuntu,macos? 發行版+xxx依賴 所以體積很小

?

# 基于容器實現的環境一致性發布
# 容器化部署架構

LXC開源倉庫 GitHub - lxc/lxc: LXC - Linux Containers

LXC容器:概念介紹及簡單上手操作指導
1、介紹LXC(Linux Containers)是一種Linux端操作系統級的虛擬化技術,可以實現輕量級容器,每個容器看起來像一個獨立的操作系統,它們共享同一臺物理服務器,但是互相隔離。LXC容器比傳統虛擬機更加輕便、高效,且啟動速度快。LXC中創建的為非特權容器,相較于特權容器,其有更高的安全性,更小的攻擊面,同時便于管理和升級。下面介紹一下LXC的架構和基本上手操作指導。開源倉庫:https://github.com/lxc/lxc官網:https://linuxcontainers.org/lxc/
2、LXC架構宿主機(Host OS):運行LXC命令和LXC用戶空間的操作系統。LXC用戶空間(Userspace):包括LXC庫、配置文件和容器元數據等組件。LXC模板(Templates):用于創建容器的基礎鏡像。LXC命令(Commands):用于管理和操作LXC容器的命令工具。LXC庫(Library):提供容器相關的API和函數庫。LXC配置(Configs):用于配置和定制容器的參數和選項。LXC網絡腳本(Net Scripts):用于管理容器的網絡連接和配置。LXC工具(Tools):提供各種輔助工具和腳本,用于管理和維護LXC容器。LXC 容器(LXC Container):相互獨立運行的輕量容器。LXC的核心功能是利用Linux內核提供的Namespace和Cgroups等機制來實現容器的隔離和虛擬化,從而使得容器可以獨立運行和管理。同時,LXC還支持各種網絡選項和安全特性,可以根據不同的應用場景進行定制和配置。
3、檢查Linux Kernel容器的要求如下內核版本要求:Linux kernel >= 3.12依賴包要求:# to allow for capability drops
libcap
# to set a different apparmor profile for the container
libapparmor
# to set a different selinux context for the container
libselinux
# to set a seccomp policy for the container
libseccomp
# for various checksumming
libgnutls
# for the LUA binding
liblua
# for the python3 binding
python3-dev

?

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

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

相關文章

利用python批量將.shp文件轉換坐標生成.geojson文件,再將.geojson轉換成.csv文件,最后將csv文件插入數據庫表

第一步:.shp批量轉.geojson # author: JMY # 創建時間: 2024/2/26 17:12 # 批量將.shp文件生成geojson文件并轉換坐標為3857import os import geopandas as gpd# 定義輸入和輸出文件夾路徑 input_folder shp文件 output_folder geojson文件# 定義輸入和輸出坐標系…

【王道操作系統】ch1計算機系統概述-04操作系統結構

文章目錄 【王道操作系統】ch1計算機系統概述-04操作系統結構操作系統的內核操作系統的體系結構考綱新增內容(紅色為全新內容,黃色為原有內容):01 分層結構02 模塊化03 宏內核(大內核)和微內核04 外核 【王…

redis03 八種數據類型

思維草圖 String類型 字符串類型,是redis中最簡單的存儲類型,可以包含任何數據,例如jpg圖片或者序列化的對象等,底層都是以字節數組形式存儲,最大能存儲512MB的數據。 常用命令 KEY命名規范 加前綴,分…

802.11局域網的 MAC 幀

目錄 802.11 局域網的 MAC 幀 802.11 數據幀的三大部分 1.關于 802.11 數據幀的地址 最常用的兩種情況 2.序號控制字段、持續期字段和幀控制字段 802.11 局域網的 MAC 幀 802.11 幀共有三種類型:控制幀、數據幀和管理幀。 802.11 數據幀的三大部分 MAC 首部&…

總結springboot啟動jar,指定配置文件

第一:覆蓋 -- 覆蓋系統中的文件中的application-dev.yml文件,兩種指定方法都可以 springboot默認優先讀取application.properties>application.yml>指定文件(application-dev.yml) 公共配置可以在application.yml,其他配置在applicatio…

基于 STM32U5 片內溫度傳感器正確測算溫度

目錄預覽 1、引言 2、問題 3、小結 01 引言 STM32 在內部都集成了一個溫度傳感器,STM32U5 也不例外。這個位于晶圓上的溫度傳感器雖然不太適合用來測量外部環境的溫度,但是用于監控晶圓上的溫度還是挺好的,以防止芯片過溫運行。 02 問題…

C# - 類與類之間的繼承關系判斷

Type.IsSubclassof(Type type) 作用:用來確定 一個類是否派生自另一個類/ValueType/Enum/委托 不能用于確定:接口是派生自另一個接口,還是類實現接口 class A{} class B : A{}A a; B b;var boo b.GetType().IsSubclassOf(typeof(A)) // t…

sqllabs第五關floor報錯注入

實驗環境sqllabs第五關 floor()報錯注入的原因是group by在向臨時表插入數據時,由于rand()多次計算導致插入臨時表時主鍵重復,從而報錯,又因為報錯前concat()中的SQL語句或函數被執行,所以該語句報錯且被拋出的主鍵是SQL語句或函…

go語言中的協程和Java中線程以及進程的區別

理解 Go 語言中的協程(Goroutine)、Java 中的線程和進程之間的區別可以從以下幾個方面來看: 輕量性: Goroutine(協程): 協程是非常輕量級的執行單位,創建和銷毀的成本很低。在 Go 中…

深入理解Lambda表達式:基礎概念與實戰演練【第114篇—python:Lambda表達式】

深入理解Lambda表達式:基礎概念與實戰演練 在現代編程語言中,Lambda表達式作為一種輕量級的匿名函數形式,越來越受到程序員的青睞。特別是在函數式編程興起的今天,Lambda表達式在簡化代碼、提高可讀性方面發揮著重要作用。本文將…

C++筆記(六)--- 靜態成員變量/函數(static)

目錄 C語言中靜態變量 C靜態成員變量 C靜態成員函數 C語言中靜態變量 1.函數內部用static修飾的變量,只能在此函數使用,但所修飾的變量不隨函數釋放而釋放,下次調用時的值仍為上次結束時的值2.static修飾的全局變量只能在其定義的文件使用…

華為OD技術面試案例6-2024年

個人情況:西電本,二戰某985基本寄了。知識儲備方面:無任何408基礎,學校開過數據結構課程60分過,python純靠自學,無任何刷題經驗,無項目經驗,簡歷東拼西湊。 大概是12月底和OD聯系&a…

數據可視化原理-騰訊-熱力圖

在做數據分析類的產品功能設計時,經常用到可視化方式,挖掘數據價值,表達數據的內在規律與特征展示給客戶。 可是作為一個產品經理,(1)如果不能夠掌握各類可視化圖形的含義,就不知道哪類數據該用…

CSP-201712-2-游戲

CSP-201712-2-游戲 解題思路 初始化變量:定義整數變量n和k,分別用來存儲小朋友的總數和淘汰的特定數字。然后定義了num(用來記錄當前報的數)和peopleIndex(用來記錄當前報數的小朋友的索引)。 初始化小朋…

MATLAB環境下基于離散小波變換的體外血管圖像處理

下面簡要介紹小波變換的部分應用。 信號去噪。小波去噪是根據有效信號和噪聲信號在小波變換后表現出的不同特性實現的,一般可用于去除語音、圖像、視頻等中的噪聲信號。小波去噪方法根據對小波系數的非線性處理方式分為三類,分別是小波變換模極大值去噪…

電子電器架構新趨勢 —— 最佳著力點:域控制器

電子電器架構新趨勢 —— 最佳著力點:域控制器 我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師(Wechat:gongkenan2013)。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師…

備戰藍橋杯---狀態壓縮DP基礎1之棋盤問題

它只是一種手段,一種直觀而高效地表示復雜狀態的手段。 我們先來看一道比較基礎的: 直接DFS是肯定不行,我們發現對某一行,只要它前面放的位置都一樣,那么后面的結果也一樣。 因此我們考慮用DP,并且只有0/…

Vue3+Element-Plus中ELMessage樣式丟失處理

Vu3Element-Plus項目中,element-plus使用按需引入有時會出現樣式失效和在vscode中使用會報錯[找不到名稱“ElMessage”。ts(2304)]錯誤 ELMessage彈框樣式丟失處理方法 使用按需引入就不能手動再引入 import { ElMessage } from "element-plus";ElMessage.success…

藍橋杯-單片機組基礎6——定時計數器與外部中斷混合使用(附小蜜蜂課程代碼)

藍橋杯單片機組備賽指南請查看這篇文章:戳此跳轉藍橋杯備賽指南文章 本文章針對藍橋杯-單片機組比賽開發板所寫,代碼可直接在比賽開發板上使用。 型號:國信天長4T開發板(綠板),芯片:IAP15F2K6…

常見的瀏覽器跨域解決方法

1. 前端方法&#xff1a;JSONP&#xff08;僅適用于GET請求&#xff09; JSONP&#xff08;JSON with Padding&#xff09;是一種利用<script>標簽的src屬性不受同源策略限制的特性來實現跨域數據請求的方法。JSONP通過在前端動態創建<script>標簽&#xff0c;并將…