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

5分鐘快速了解Docker的底層原理

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

[[378815]]

本文轉載自微信公眾號「小姐姐味道」,作者小姐姐養的狗 。轉載本文請聯系小姐姐味道公眾號。  

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

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

Docker能實現這些功能,依賴于chroot、namespace、cgroup等三種老技術。我們本篇文章,就先聊一下namespace方面的東西。畢竟隔離是容器的第一要素。

 

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

1. 8種類型

我們先來看一下,Linux都支持哪些Namespace。可以通過unshare命令來觀察到這些細節。在終端執行man unshare,將會出現這些Namespace的介紹。

 

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

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

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

2. 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的實驗性命令,你可以實際操作一下。

3. 試驗一下

  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的一張生命周期圖。來源(http://docker-saigon.github.io/post/Docker-Internals/ )。有需要的同學可以加我的好友獲取。

 

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

 

作者簡介:小姐姐味道 (xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高并發世界,給你不一樣的味道。我的個人微信xjjdog0,歡迎添加好友,進一步交流。

 

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

2021-02-03 11:20:41

Docker架構容器

2021-12-01 06:50:50

Docker底層原理

2021-01-06 05:23:15

ServiceMesh網絡阿帕網

2021-01-29 18:09:05

DockerCgroupsLinux

2020-10-29 08:28:42

Java NIO異步非阻塞

2021-04-30 16:23:58

WebRTC實時音頻

2020-07-17 07:44:25

云計算邊緣計算IT

2020-12-07 11:23:32

Scrapy爬蟲Python

2021-03-23 15:35:36

Adam優化語言

2020-05-12 09:10:24

瀏覽器服務器網絡

2022-09-08 11:12:09

ES6JavaScript

2024-11-07 16:09:53

2021-03-31 09:10:25

UI設計經驗

2018-03-12 21:31:24

區塊鏈

2025-05-22 10:00:00

DockerRedis容器

2020-07-21 07:42:29

數據庫信息技術

2016-11-30 14:46:27

量子計算機量子計算

2018-03-12 14:37:50

區塊鏈比特幣架構

2024-06-25 12:25:12

LangChain路由鏈

2020-10-13 18:22:58

DevOps工具開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久操伊人 | 黄a在线观看 | 精品久久久久久久久久久久久久 | 日韩精品 电影一区 亚洲 | 国产亚洲精品91 | 亚洲国产精品视频 | 拍真实国产伦偷精品 | 九九热在线视频 | 精品国产一区二区三区久久 | 999国产精品视频 | 成人做爰69片免费观看 | 国产 日韩 欧美 在线 | 欧美一级欧美一级在线播放 | 永久网站| 国产欧美精品一区二区三区 | 欧美亚洲综合久久 | 久艹av | 网站黄色在线免费观看 | 国产最新精品视频 | 91国产在线视频在线 | 在线看av网址 | 人人干人人玩 | av网站观看| 亚洲欧美激情精品一区二区 | 日日爽 | 成人免费观看男女羞羞视频 | 国产精品自拍视频网站 | 天天操天天干天天曰 | 欧美福利 | 中文在线a在线 | 国家aaa的一级看片 h片在线看 | 国产1区2区3区 | 精品久久久久久久久亚洲 | 亚洲精品一区二区三区中文字幕 | 精品一区二区三区在线观看国产 | 国产成人在线一区 | 欧美日韩国产在线观看 | 亚洲国产精品成人久久久 | 久久久久网站 | 波波电影院一区二区三区 | 亚洲一区二区三区在线 |