最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

關于docker的個人理解

2023-03-06 20:09 作者:風格星辰  | 我要投稿

過去幾天在學習docker和kubernetes,分享下自己的理解,大家和諧交流

docker知識體系

首先來個靈魂三問

1、什么是docker

docker是一種容器引擎

那什么是容器?

容器 輕量級的虛擬化技術,將應用運行在內(nèi)部,與外界隔離。

容器也是特殊的進程,通過namespace隔離運行邊界。

什么又是虛擬化技術?

將計算機的各種實體資源(cpu、內(nèi)存、網(wǎng)絡、存儲)進行抽象,形成有多個資源的假象。

本質是資源的抽象化,目的是為了充分利用資源。

容器和虛擬機有啥區(qū)別?

最大的區(qū)別是虛擬機需要虛擬出操作系統(tǒng),容器直接使用宿主機的操作系統(tǒng)。如下圖

虛擬機和容器區(qū)別

2、為什么要使用docker

容器優(yōu)點

1、移植方便 封裝了運行程序必須的細節(jié)

2、標準化 基于開放標注,可以運行在主流的發(fā)行版操作系統(tǒng)上

3、安全 各個容器進程互不影響

4、輕量級 占用資源更少

容器缺點

既然容器只是運行在宿主機上的一種特殊的進程,那么多個容器之間使用的就還是同一個 宿主機的操作系統(tǒng)內(nèi)核。

在 Linux 內(nèi)核中,有很多資源和對象是不能被 Namespace 化的,如時間

3、如何使用docker

需要了解倉庫、鏡像、容器等三大概念

倉庫是存放鏡像的地方

鏡像就是靜態(tài)的文件系統(tǒng)

容器就是運行起來的應用

使用很簡單,這里就不提了

4、docker如何實現(xiàn)資源隔離、資源管控、輕量級

Cgroups 技術是用來制造約束的主要手段,而 Namespace 技術則是用來修改進程視圖的主要方法。

通過lxc自帶的namespace實現(xiàn)資源隔離,包括六個方面

主機域名UTS、進程PID、進程間通信IPC、網(wǎng)絡Network、存儲Mount、用戶User

通過lxc自帶的controllerGroup即cGroup實現(xiàn)資源管控。

Linux Cgroups 的全稱是 Linux Control Group。它最主要的作用,就是限制一個進程組能夠 使用的資源上限,包括 CPU、內(nèi)存、磁盤、網(wǎng)絡帶寬等等。

/sys/fs/cgroup/

在具體的子系統(tǒng)下創(chuàng)建目錄如/sys/fs/cgroup/cpu/container

操作系統(tǒng)會自動生成資源限制文件

修改cfs_quota限制運行時間,

docker在每個子系統(tǒng)下創(chuàng)建一個控制組,然后容器啟動時將pid填寫到tasks文件中

一個正在運行的 Docker 容器,其實就是一個啟用了多個 Linux Namespace 的應用進程,而這個進程能夠使用的資源量,則受 Cgroups 配置的限制。

就是 Mount Namespace 跟其他 Namespace 的使用略有不同的地方:它對容器進程視圖的 改變,一定是伴隨著掛載操作(mount)才能生效。

mount Namespace根據(jù)chroot改良的

容器鏡像(rootfs根文件系統(tǒng)) 掛載在容器根目錄上、用來為容器進程提供隔離后執(zhí)行環(huán)境的文件系統(tǒng)

docker核心

1、啟用linux namespace配置

2、設定指定cgroup參數(shù)

3、切換進程根目錄(changeRoot)

每次都要制作rootfs?

通過聯(lián)合文件系統(tǒng)UFS實現(xiàn)輕量級

將底層鏡像lower作為只讀層,每次往上層upper覆蓋一個可寫層。合并成merge層。

將多個層聯(lián)合掛載在一個目錄下

這樣所有的容器都可以共用同一個操作系統(tǒng)鏡像,節(jié)省大量存儲空間。

rootfs包含三部分

1、只讀層 即操作系統(tǒng)基礎鏡像

2、可讀寫層 刪除是創(chuàng)建whiteout文件,將文件遮擋起來 存放修改rootfs后的增量

3、init層 基礎鏡像的一部分,但需要在啟動容器時做修改,單獨掛載

一個進程,可以選擇加入到某個進程已有的 Namespace 當中,從而達到“進 入”這個進程所在容器的目的,這正是 docker exec 的實現(xiàn)原理。

Volume 機制,允許你將宿主機上指定的目錄或者文 件,掛載到容器里面進行讀取和修改操作。

dockerinit 會負責完成 根目錄的準備、掛載設備和目錄、配置 hostname 等一系列需要在容器內(nèi)進行的 初始化操作。

/var/lib/docker/volumes/[VOLUME_ID]/_data


關于docker的個人理解的評論 (共 條)

分享到微博請遵守國家法律
梨树县| 长武县| 锡林浩特市| 永修县| 平顶山市| 井研县| 绍兴县| 阿瓦提县| 嘉祥县| 沧源| 呼玛县| 平顶山市| 平潭县| 襄城县| 巴彦淖尔市| 绥中县| 隆子县| 双峰县| 长泰县| 呼和浩特市| 桦甸市| 那坡县| 汨罗市| 宝应县| 称多县| 广安市| 临泽县| 泽州县| 北安市| 荃湾区| 邯郸县| 深圳市| 准格尔旗| 比如县| 福安市| 广饶县| 莫力| 长武县| 和龙市| 江达县| 临汾市|