偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

五分鐘搞定Docker底層原理

云計(jì)算 開(kāi)發(fā)工具
一位同學(xué)曾給我打比方:宿主機(jī)就好比一間大房子,Docker 把它成了 N 個(gè)小隔斷。在這些小隔斷之間,有獨(dú)立的衛(wèi)生間、小床、電視...

一位同學(xué)曾給我打比方:宿主機(jī)就好比一間大房子,Docker 把它成了 N 個(gè)小隔斷。在這些小隔斷之間,有獨(dú)立的衛(wèi)生間、小床、電視...

[[437703]]

圖片來(lái)自 包圖網(wǎng)

麻雀雖小,五臟俱全,這個(gè)比喻非常的貼切。Linux 提供了非常全面的隔離機(jī)制,使得每個(gè)小隔間互不影響。即使隔壁小間滿室春光,我的小房間一樣的冷清,對(duì)我毫無(wú)影響。

Docker 能實(shí)現(xiàn)這些功能,依賴(lài)于 chroot、namespace、cgroup 等三種老技術(shù)。

我們本篇文章,就先聊一下 namespace 方面的東西。畢竟隔離是容器的第一要素。

Linux 的內(nèi)核,提供了多達(dá) 8 種類(lèi)型的 Namespace。在這些獨(dú)立的 Namespace 中,資源互不影響,隔離措施做的非常好。

8 種類(lèi)型

我們先來(lái)看一下,Linux 都支持哪些 Namespace??梢酝ㄟ^(guò) unshare 命令來(lái)觀察到這些細(xì)節(jié)。

在終端執(zhí)行 man unshare,將會(huì)出現(xiàn)這些 Namespace 的介紹:

  • Mount(mnt):隔離掛載點(diǎn)
  • Process ID (pid):隔離進(jìn)程 ID
  • Network (net):隔離網(wǎng)絡(luò)設(shè)備,端口號(hào)等
  • Interprocess Communication (ipc):隔離 System V IPC 和 POSIX message queues
  • UTS Namespace(uts):隔離主機(jī)名和域名
  • User Namespace (user):隔離用戶(hù)和用戶(hù)組

另外,Linux 在 4.6 版本,5.6 版本,分別加入了 cgroups 和 Time 兩種隔離類(lèi)型,加起來(lái)就有 8 種。

Control group (cgroup) Namespace 隔離 Cgroups 根目錄 (4.6 版本加入);Time Namespace 隔離系統(tǒng)時(shí)間 (5.6 版本加入)。

1 個(gè)例子

通過(guò) unshare 命令,可以快速建立一些隔離的例子,我們拿最簡(jiǎn)單直觀的 pid namespace 來(lái)看一下它的效果。

眾所周知,Linux 進(jìn)程號(hào)為 1 的,叫做 systemd 進(jìn)程。但在 Docker 中,我們通過(guò)執(zhí)行 ps 命令,卻只能看到非常少的進(jìn)程列表。

執(zhí)行下面的命令,進(jìn)入隔離環(huán)境,并將 bash 作為根進(jìn)程:

  1. unshare --pid --fork --mount-proc /bin/bash 

效果如圖所示:

可以看到,我們的 bash,已經(jīng)成為了 1 號(hào)進(jìn)程,而宿主機(jī)和其他隔離環(huán)境的進(jìn)程信息,在這里是不可見(jiàn)的。

先在隔離環(huán)境中,執(zhí)行 sleep 1000。再開(kāi)一個(gè)終端,在宿主機(jī)上執(zhí)行 pstree,我們將會(huì)看到這個(gè)隔離環(huán)境的進(jìn)行信息。

接下來(lái),在宿主機(jī)上,把 sleep 對(duì)應(yīng)進(jìn)程的命名空間信息,和宿主機(jī)的命名空間信息作一下對(duì)比。

可以看到,它們的 pid namespace,對(duì)應(yīng)的數(shù)值是不同的。

下面給出其他 namespace 的實(shí)驗(yàn)性命令,你可以實(shí)際操作一下。

試驗(yàn)一下

  1. unshare --mount --fork /bin/bash 

創(chuàng)建 mount namespace,并在每個(gè)不同的環(huán)境中,使用不同的掛載目錄。

  1. unshare --uts --fork /bin/bash 

uts 可以用來(lái)隔離主機(jī)名稱(chēng),允許每個(gè) namespace 擁有一個(gè)獨(dú)立的主機(jī)名,你可以通過(guò) hostname 命令進(jìn)行修改。

  1. unshare --ipc --fork /bin/bash 

IPC Namespace 主要是用來(lái)隔離進(jìn)程間通信的。Linux 的進(jìn)程間通信,有管道、信號(hào)、報(bào)文、共享內(nèi)存、信號(hào)量、套接口等方式。

使用了 IPC 命名空間,意味著跨 Namespace 的這些通信方式將全部失效!不過(guò),這也正是我們所希望的到的。

  1. unshare --user -r /bin/bash 

用戶(hù)命名空間,就非常好理解了。我們可以在一個(gè) Namespace 中建立 xjjdog 賬號(hào),也可以在另外一個(gè) Namespace 中建立 xjjdog 賬號(hào),而且它們是相互不影響的。

  1. unshare --net --fork /bin/bash 

net namespace,這個(gè)就非常有用了。它可以用來(lái)隔離網(wǎng)絡(luò)設(shè)備、IP 地址和端口等信息。

結(jié)語(yǔ)

可以看到,通過(guò)各種 Namespace,Linux 能夠?qū)Ω鞣N資源進(jìn)行精細(xì)化的隔離。

Docker 本身也是一個(gè)新瓶裝舊酒的玩具。Docker 的創(chuàng)新之處,在于它加入了一個(gè)中央倉(cāng)庫(kù),并封裝了很多易用的命令。

你可能會(huì)發(fā)現(xiàn),到目前為止,我們并沒(méi)有對(duì) CPU 和內(nèi)存的資源使用進(jìn)行隔離,也沒(méi)有對(duì)應(yīng)的 Namespace 來(lái)解決這些問(wèn)題。

資源限制的功能,是使用 Cgroups 進(jìn)行限額配置來(lái)完成的,和 Namespace 沒(méi)什么關(guān)系。我們將在后面的文章,介紹 Cgroups 這項(xiàng)技術(shù)。

最后,附上 Docker 的一張生命周期圖:

Docker 發(fā)展到現(xiàn)在,應(yīng)用工具鏈已經(jīng)非常成熟了,很多同學(xué)已經(jīng)駕輕就熟,如果你對(duì)容器技術(shù)非常感興趣,不如多看一下最底層的原理。這樣,不管是谷歌推自己的容器,還是繼續(xù)使用 Docker,都能快速把它掌握。

作者:小姐姐味道

編輯:陶家龍

來(lái)源:轉(zhuǎn)載自公眾號(hào)小姐姐味道(ID:xjjdog)

 

責(zé)任編輯:武曉燕 來(lái)源: 小姐姐味道
相關(guān)推薦

2021-01-27 18:15:01

Docker底層宿主機(jī)

2025-03-18 09:20:00

Go語(yǔ)言Golang

2020-10-29 08:28:42

Java NIO異步非阻塞

2017-09-27 11:00:50

LinuxBash使用技巧

2023-07-23 18:47:59

Docker開(kāi)源

2021-02-03 11:20:41

Docker架構(gòu)容器

2021-11-08 18:37:45

MySQL解碼測(cè)試

2020-02-21 19:54:09

HTTPS 配置手把手教

2015-12-03 14:10:26

systemd容器Linux

2022-12-13 10:05:27

定時(shí)任務(wù)任務(wù)調(diào)度操作系統(tǒng)

2023-08-15 14:46:03

2020-12-07 09:01:58

冪等系統(tǒng)f(f(x)) =f(

2020-05-12 09:10:24

瀏覽器服務(wù)器網(wǎng)絡(luò)

2023-04-04 09:13:15

2025-05-22 10:00:00

DockerRedis容器

2025-05-26 10:25:00

防御性編程開(kāi)發(fā)編程

2020-06-16 08:47:53

磁盤(pán)

2025-03-13 06:22:59

2024-12-11 07:00:00

面向?qū)ο?/a>代碼

2009-11-16 10:53:30

Oracle Hint
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)