成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

五分鐘搞定Docker底層原理

云計算 開發工具
一位同學曾給我打比方:宿主機就好比一間大房子,Docker 把它成了 N 個小隔斷。在這些小隔斷之間,有獨立的衛生間、小床、電視...

一位同學曾給我打比方:宿主機就好比一間大房子,Docker 把它成了 N 個小隔斷。在這些小隔斷之間,有獨立的衛生間、小床、電視...

[[437703]]

圖片來自 包圖網

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

Docker 能實現這些功能,依賴于 chroot、namespace、cgroup 等三種老技術。

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

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

8 種類型

我們先來看一下,Linux 都支持哪些 Namespace。可以通過 unshare 命令來觀察到這些細節。

在終端執行 man unshare,將會出現這些 Namespace 的介紹:

  • Mount(mnt):隔離掛載點
  • Process ID (pid):隔離進程 ID
  • Network (net):隔離網絡設備,端口號等
  • Interprocess Communication (ipc):隔離 System V IPC 和 POSIX message queues
  • UTS Namespace(uts):隔離主機名和域名
  • User Namespace (user):隔離用戶和用戶組

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

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

1 個例子

通過 unshare 命令,可以快速建立一些隔離的例子,我們拿最簡單直觀的 pid namespace 來看一下它的效果。

眾所周知,Linux 進程號為 1 的,叫做 systemd 進程。但在 Docker 中,我們通過執行 ps 命令,卻只能看到非常少的進程列表。

執行下面的命令,進入隔離環境,并將 bash 作為根進程:

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

效果如圖所示:

可以看到,我們的 bash,已經成為了 1 號進程,而宿主機和其他隔離環境的進程信息,在這里是不可見的。

先在隔離環境中,執行 sleep 1000。再開一個終端,在宿主機上執行 pstree,我們將會看到這個隔離環境的進行信息。

接下來,在宿主機上,把 sleep 對應進程的命名空間信息,和宿主機的命名空間信息作一下對比。

可以看到,它們的 pid namespace,對應的數值是不同的。

下面給出其他 namespace 的實驗性命令,你可以實際操作一下。

試驗一下

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

創建 mount namespace,并在每個不同的環境中,使用不同的掛載目錄。

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

uts 可以用來隔離主機名稱,允許每個 namespace 擁有一個獨立的主機名,你可以通過 hostname 命令進行修改。

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

IPC Namespace 主要是用來隔離進程間通信的。Linux 的進程間通信,有管道、信號、報文、共享內存、信號量、套接口等方式。

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

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

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

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

net namespace,這個就非常有用了。它可以用來隔離網絡設備、IP 地址和端口等信息。

結語

可以看到,通過各種 Namespace,Linux 能夠對各種資源進行精細化的隔離。

Docker 本身也是一個新瓶裝舊酒的玩具。Docker 的創新之處,在于它加入了一個中央倉庫,并封裝了很多易用的命令。

你可能會發現,到目前為止,我們并沒有對 CPU 和內存的資源使用進行隔離,也沒有對應的 Namespace 來解決這些問題。

資源限制的功能,是使用 Cgroups 進行限額配置來完成的,和 Namespace 沒什么關系。我們將在后面的文章,介紹 Cgroups 這項技術。

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

Docker 發展到現在,應用工具鏈已經非常成熟了,很多同學已經駕輕就熟,如果你對容器技術非常感興趣,不如多看一下最底層的原理。這樣,不管是谷歌推自己的容器,還是繼續使用 Docker,都能快速把它掌握。

作者:小姐姐味道

編輯:陶家龍

來源:轉載自公眾號小姐姐味道(ID:xjjdog)

 

責任編輯:武曉燕 來源: 小姐姐味道
相關推薦

2021-01-27 18:15:01

Docker底層宿主機

2025-03-18 09:20:00

Go語言Golang

2020-10-29 08:28:42

Java NIO異步非阻塞

2017-09-27 11:00:50

LinuxBash使用技巧

2023-07-23 18:47:59

Docker開源

2021-02-03 11:20:41

Docker架構容器

2015-12-03 14:10:26

systemd容器Linux

2020-02-21 19:54:09

HTTPS 配置手把手教

2021-11-08 18:37:45

MySQL解碼測試

2022-12-13 10:05:27

定時任務任務調度操作系統

2023-08-15 14:46:03

2023-04-04 09:13:15

2020-12-07 09:01:58

冪等系統f(f(x)) =f(

2020-05-12 09:10:24

瀏覽器服務器網絡

2025-05-22 10:00:00

DockerRedis容器

2025-05-26 10:25:00

防御性編程開發編程

2024-12-11 07:00:00

面向對象代碼

2025-03-13 06:22:59

2009-11-16 10:53:30

Oracle Hint

2020-06-16 08:47:53

磁盤
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成年人在线观看视频 | 欧美黄色精品 | 91成人小视频 | 亚洲一区二区免费视频 | 久久久久久久久久久久久久国产 | 黄色免费在线观看网址 | 日韩免费成人av | 熟女毛片 | 国产精品一区二区免费 | 日韩欧美亚洲 | 91精品国产91久久综合桃花 | 久久久一区二区 | 毛片黄| 国产激情一区二区三区 | 国产精品久久久久久中文字 | 国产中文字幕av | 九九热精品在线 | 国产高清av免费观看 | 欧美在线天堂 | 欧美精品网站 | 精品视频一区二区三区 | 欧美日韩高清在线一区 | 午夜影院在线视频 | 夜夜骚 | 午夜精品久久久久久久99黑人 | 一区二区三区在线观看免费视频 | 国产精品久久久久久一区二区三区 | 国产成人精品久久二区二区91 | 国产a区| 欧美精品导航 | 午夜在线影院 | av毛片免费| 国产高清一二三区 | 免费观看一级特黄欧美大片 | 一区二区三区久久久 | 国产精品美女久久久久久久久久久 | 人人玩人人添人人澡欧美 | 亚洲一区视频在线 | 91在线网站| 99久久婷婷国产综合精品电影 | 综合久久久久久久 |