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

【博文推薦】Windows Docker第一時間揭秘!

云計算
這是盆盆談微軟兩會(Build/Iginte)系列之一。文章引用孫建波老師關(guān)于Linux內(nèi)核的6大命名空間隔離,看Windows Docker如何實現(xiàn)類似隔離,同時又有哪些不同。文章素材取自Build和Ignite大會視頻,但主要展示盆盆自己的分析和研究,還望大家指正為謝。

【編者的話】這是盆盆談微軟兩會(Build/Iginte)系列之一。文章引用孫建波老師關(guān)于Linux內(nèi)核的6大命名空間隔離,看Windows Docker如何實現(xiàn)類似隔離,同時又有哪些不同。文章素材取自Build和Ignite大會視頻,但主要展示盆盆自己的分析和研究,還望大家指正為謝。

  本博文出自51CTO博客華來四盆盆博主,有任何問題請進(jìn)入博主頁面互動討論!
博文地址:http://markwin.blog.51cto.com/148406/1649973

今天在微信群里聽一位兄弟提到,Docker能將DevOps(意即"開發(fā)"和"運維")整合在一起,暗合王陽明先生的“知行合一”之教,這真是一種有趣的說法。

話說從頭,盆盆在《Windows Dcoker深入原理分析》里曾經(jīng)提到Build大會后,您可以在華來四公眾號里回復(fù)docker8,閱讀這篇文章(可以在微信里搜索并關(guān)注公眾號:sysinternal),會第一時間給大家介紹Windows Docker技術(shù)。

還沒看過Build在線視頻的朋友,您可以泡杯咖啡,帶上耳機,靜靜地欣賞以下由Taylor Brown主講的Windows Docker講座,我們的文章就以此為藍(lán)本。這里需要注意的是,以下的論述,大多是盆盆根據(jù)Taylor的demo效果所做的推論,并不是Taylor本人的陳述,所以并不一定正確。如有問題,還望大家多

多指點哈。

http://channel9.msdn.com/Events/Build/2015/2-704

容器即隔離

拿大家熟悉的Linux Docker來看,其涉及到Linux內(nèi)核所提供的Namespace隔離技術(shù)和資源控制的CGroup技術(shù)。

這里推薦大家閱讀浙大SEL研究生孫建波老師的文章《Docker背后的內(nèi)核知識——Namespace資源隔離》:

http://www.infoq.com/cn/articles/docker-kernel-knowledge-namespace-resource-isolation?from=timeline&isappinstalled=0

孫建波老師提到了一張表格,其中列出了Linux內(nèi)核所支持的6種隔離:曰主機名、曰IPC、曰進(jìn)程ID、曰網(wǎng)絡(luò)、曰文件系統(tǒng)、曰賬號。

 

Windows Docker第一時間揭秘

盡管Windows內(nèi)核實現(xiàn)和Linux不同,但是兩者還是有不少可比擬處。所以盆盆根據(jù)Build大會上Mark Russinovich這位大神以及Taylor Brown的講座,來條分縷析。

文件系統(tǒng)隔離

先來看看浙大SEL另一位大牛孫宏亮老師的文章《Docker源碼分析(九):Docker鏡像 》。這篇文章清晰地描述了Linux Docker的文件系統(tǒng)隔離,多層的可疊加文件系統(tǒng)。

http://blog.daocloud.io/docker-source-code-analysis-part9/

孫宏亮老師指出:假設(shè)我們下拉了Ubuntu:14.04映像,并通過命令docker run –it ubuntu:14.04 /bin/bash將其啟動運行。則Docker為其創(chuàng)建的rootfs以及容器可讀寫的文件系統(tǒng)參見下圖。從容器的視角來看,雖然只有一個邏輯的完整文件系統(tǒng),但該文件系統(tǒng)由“2層”組成,分別為讀寫文件系統(tǒng)和只讀文件系統(tǒng)(按只讀層還可以再邏輯分層,所以極大地節(jié)省磁盤空間)。

 

Windows Docker第一時間揭秘

Windows Docker同樣如此,頂層的沙盒層(sandbox layer)是可讀寫的,只允許該容器自己占用,而其他層則是只讀的,可供不同容器共享。在下圖中,底層的基礎(chǔ)OS層和中間的應(yīng)用程序框架層都是只讀的,而頂層的沙盒層則可讀寫,在容器的視角看來,它獨占了完整的OS。這有點類似于Hyper-V的差異磁盤鏈(頂部的子盤才能讀寫,其上方的所有父盤和 Base盤都是只讀的)。

 

Windows Docker第一時間揭秘

為了說明文件系統(tǒng)隔離的魔力,Taylor得意地在Windows Container里執(zhí)行刪除C盤根目錄下所有文件和注冊表鍵值,盡管這個容器被毀了,但是根本不會影響其他容器,更不會影響主機。

 

Windows Docker第一時間揭秘

盆盆猜測,在容器的視角里,如果只是讀取一個文件,該文件在最頂端的沙盒層里只有重解析點(reparse point);只有在修改該文件時,才會用copy-on-writer的方法從下方的只讀層中把文件內(nèi)容復(fù)制到可讀寫的沙盒層。

#p#

創(chuàng)建Windows Container

視頻里演示了一個很棒的demo。有一段簡單的代碼,在console里顯示“This is a pretty cool app”。

 

Windows Docker第一時間揭秘

這是用來構(gòu)建Windows Docker映像的Dockerfile。這個文件由以下4行命令組成:

第1行:表明該映像基于windowsservercore這個Base映像,可以將其理解為rootfs

第2行:表示工作目錄是C盤根目錄

第3行:將應(yīng)用目錄復(fù)制到容器映像里

 

第4行:啟動該應(yīng)用程序

Windows Docker第一時間揭秘

很快用docker build命令將其構(gòu)建為容器映像,Tag是1。從命令結(jié)果中可以看到Dockerfile里的每個命令都被執(zhí)行,在執(zhí)行第4個命令時,會生成一個臨時的容器。

Windows Docker第一時間揭秘

 

Docker映像構(gòu)建完成后,只需運行docker run命令即可快速啟動該映像,并成功顯示"This is a pretty cool app..."。

 

Windows Docker第一時間揭秘

通過使用docker history命令,我們可以查看容器映像的構(gòu)建歷史,這甚至可以用來逆向生成Dockerfile。例如視頻里演示了sysinternals這個映像的構(gòu)建歷史。從中我們可以看到:首先記錄維護(hù)人員是誰;然后指定工作目錄是C盤根目錄;再者是將sysinternals suite這個工具軟件目錄拷貝到容器映像里;然后設(shè)定容器的運行賬戶;最后設(shè)置啟動Ipconfig以便顯示容器的IP地址。

 

Windows Docker第一時間揭秘

#p#

IPC隔離

和Linux Docker Container一樣,Windows Server Container也采用IPC隔離機制。這實際上是利用Windows自己的session隔離機制。

會話(session)隔離機制,最初是用在Windows終端服務(wù)和快速用戶切換中。但是從Windows Vista開始,Windows也采用這種技術(shù)對系統(tǒng)會話進(jìn)行隔離,Windows系統(tǒng)的服務(wù)和進(jìn)程會占用原來的控制臺會話(會話0),而后續(xù)的用戶會依次使用會話1、會話2等等。

從《Windows Internals》里我們可以學(xué)習(xí)到,不同會話里的應(yīng)用,不能夠發(fā)送窗口消息(Window Message,以防止粉碎攻擊)。不同會話里擁有不同的對象命名空間,例如不同容器,有自己獨立的BaseNamedObjects目錄,包含事件、互斥信號和內(nèi)存段等對象。這樣不同容器在同一個Windows主機上訪問同一個命名對象,就不會導(dǎo)致沖突。以下的WinObj截圖雖然不是取自 Windows Docker系統(tǒng),但是道理是一樣的。

 

Windows Docker第一時間揭秘

有興趣的朋友可以參考盆盆在9年前發(fā)表在ITECN博客上的文章,介紹會話隔離技術(shù):

http://blogs.itecn.net/blogs/winvista/archive/2006/06/09/SrvSession0.aspx

視頻里演示了Docker容器的會話隔離能力,Taylor啟動了兩個容器,都是從同一個windowsservercore映像里創(chuàng)建出來。其中一個容器,可以運行Tasklist命令,看到該容器運行在會話14中。而且還能看到兩個系統(tǒng)進(jìn)程,一個是System進(jìn)程,代表操作系統(tǒng)本身,另一個是空閑進(jìn)程,這兩個進(jìn)程都運行在會話0里。

 

Windows Docker第一時間揭秘

在同一個映像所創(chuàng)建的另一個容器里,我們可以看到該容器運行在會話15中,同樣可以看到System和空閑進(jìn)程。

Windows Docker第一時間揭秘

Taylor的解釋是由于容器是共享 Windows Kernel的,所以容易可以看到System進(jìn)程的PID是一樣的,都是4。其實在所有Windows主機上,System進(jìn)程的PID都是4。

 

網(wǎng)絡(luò)隔離+圖形化訪問

和Linux容器一樣,Windows容器也可以有自己的獨立網(wǎng)絡(luò)配置。

 

Windows Docker第一時間揭秘

 

由于傳統(tǒng)的Windows應(yīng)用大多是有GUI的,所以這些應(yīng)用可能需要通過圖形化方式進(jìn)行遠(yuǎn)程操控。

視頻里Taylor舉了一個sysinternals容器的例子。有趣的是,這個demo本來是Mark Russsinovich的保留曲目,可惜Keynote的時間十分寶貴,最Mark沒能有足夠的時間去演示。

Taylor演示啟動Sysinternals Suite里的經(jīng)典工具Process Explorer,由于該工具帶GUI,所以雖然進(jìn)程已經(jīng)在容器里啟動,但是在Docker Client里無法直接遠(yuǎn)程顯示。

如何才能正常顯示呢?Taylor用了一個CC命令,直接連接到該容器的IP地址。從demo里我們可以看出,實際上這個CC命令連接到容器的RDP服務(wù)上,這樣就相當(dāng)于直接通過終端服務(wù)連接到容器里的會話里。

 

Windows Docker第一時間揭秘

盆盆在《Windows Dcoker深入原理分析》里曾經(jīng)提到Windows Docker的前身DrawBridge在其沙盒里實現(xiàn)了RDP服務(wù)(請在華來四公眾號里回復(fù)docker8,閱讀這篇文章),Windows Docker的原理應(yīng)該類似。

 

Windows Docker第一時間揭秘

Linux Docker也能訪問圖形化界面,在以下的這篇文章《在 Docker 中運行 OpenOffice》里介紹,只需在Dockerfiles里添加安裝X Server的命令,就能借助VNC客戶端連接到OpenOffice圖形化界面。

http://linux.cn/article-5305-weibo.html

#p#

PID隔離

在Linux容器里,容器里的PID有自己的獨立命名空間。從演示的情況來看,Windows容器的PID隔離方法看上去略有不同。

在前面IPC隔離一節(jié),我們可以通過Tasklist命令確認(rèn)不同的容器,其CSRSS、Lsass、SVCHOST等系統(tǒng)進(jìn)程的PID有所不同,可見彼此之間是完全隔離的。

那么從宿主機的角度來看呢?

我們可以看Process Explorer的例子(該例子是在Ignite大會上由Taylor所演示的),由于Process Explorer是在終端會話里打開的,所以我們可以在容器的任務(wù)管理器里看到有兩個會話

  1. 14是Docker客戶端訪問的會話
  2. 而15則是通過RDP訪問的會話

可以看到Process Explorer的進(jìn)程有兩個版本。顯然,會話14是Taylor在Docker客戶端里運行的結(jié)果(但是我們無法看到圖形化界面),而會話15則是RDP訪問的結(jié)果。

兩者的運行賬戶不一樣,RDP登錄的運行身份為Administrator(應(yīng)該和Docker History一致),而會話14則是System賬戶。

以下是容器里的任務(wù)管理器。

 

Windows Docker第一時間揭秘

這個任務(wù)管理器是從容器的角度來看的,我們可以記下其中的若干SVCHOST進(jìn)程的PID。接下來我們打開宿主機的任務(wù)管理器,從全局的角度來查看??梢园l(fā)現(xiàn),從宿主機的角度來看,能看到每個容器里的進(jìn)程,其PID和容器里面的版本是一樣的。

Windows Docker第一時間揭秘

用戶賬戶隔離

Linux內(nèi)核擁有賬戶隔離能力,可以讓容器里的進(jìn)程以root身份運行,但是在宿主機上,該賬戶實際上是普通用戶權(quán)限。

在 Taylor的這個演示中,我們也能“察覺”到一些蛛絲馬跡。在PID隔離一節(jié)的兩個任務(wù)管理器截圖里,容器里的版本可以看到Process Explorer的運行賬戶為Administrator,但是從宿主機上查看,該賬戶為空。所以Windows容器有可能也實現(xiàn)了類似的賬戶隔離技術(shù)。

計算機名和域名隔離

Windows容器擁有自己的計算機名和域名隔離能力,這樣在網(wǎng)絡(luò)上,Windows容器看上去類似于一臺獨立的虛擬機。

不過由于共享內(nèi)核,所以Windows容器目前應(yīng)該不支持活動目錄,畢竟同一臺宿主機上所有容器應(yīng)該都具有同一個SID,這樣就無法加域(無法驗證計算機賬戶)。

盆盆推測,到了Windows容器時代,類似于活動目錄這類比較笨重的驗證協(xié)議可能會逐漸退出歷史舞臺。畢竟活動目錄需要開放那么多端口,需要借助ADFS等手段才能穿透Internet。

不過Windows容器的驗證并不會存在問題,Azure AD和證書等都是很合適的辦法。

容器的優(yōu)勢

容器非常適合開發(fā)的快速迭代、快速回滾。Taylor做了一個簡單的演示,對前面所述的代碼進(jìn)行修改,調(diào)用私有的msvcr120.dll文件里的_snwprintf函數(shù)。

 

Windows Docker第一時間揭秘

但是在docker build的時候,Taylor沒有修改Dockerfile,沒有像Mark之前的demo那樣把私有的msvcr120.dll拷貝到容器映像中,生成新的映像Layer。

 

Windows Docker第一時間揭秘

結(jié)果由于容器的目標(biāo)宿主機上沒有安裝Visual Studio,所以新Build的容器運行失敗,提醒缺少msvcr120.dll文件。

 

解決辦法很簡單,要么修復(fù)這個Bug,要么根據(jù)先前的映像快速生成新的容器,這只需要花費幾秒鐘時間!

Windows Docker第一時間揭秘

解決這個問題很簡單,可以根據(jù)先前的映像快速生成新的容器,這大概只需要幾秒鐘時間。這樣就可以有充足的時間去調(diào)試修改了。在Build大會的Keynote上,Mark Russinovich演示了用Visual Studio把同一個電商網(wǎng)站的代碼簽入到Windows容器和Linux容器里,并且可以用Visual Studio來調(diào)試Linux容器里的代碼。

在Build大會的Keynote上,Mark Russinovich演示了用Visual Studio把同一個電商網(wǎng)站的代碼簽入到Windows容器和Linux容器里,并且可以用Visual Studio來調(diào)試Linux容器里的代碼。


 

責(zé)任編輯:Ophira 來源: 51CTO
相關(guān)推薦

2021-10-05 15:23:12

Windows 11Windows微軟

2012-03-16 11:27:47

網(wǎng)易閱讀

2010-07-05 09:31:02

思科Cius

2011-02-14 09:44:16

2013-02-23 08:17:43

2010-02-02 15:40:42

2015-11-16 15:09:50

2012-06-02 07:49:58

2015-07-14 12:34:05

2013-06-27 13:29:46

云推送消息推送移動開發(fā)

2010-01-22 10:09:54

2013-12-09 10:09:09

開源 PC開源英特爾

2012-07-24 23:41:05

2023-11-30 14:21:34

2013-09-11 18:12:10

2016-11-21 17:41:49

網(wǎng)絡(luò)宕機網(wǎng)絡(luò)性能

2018-07-04 06:42:10

2018-08-03 14:17:12

CPU顯卡AMD

2019-10-09 16:47:18

MacOS蘋果系統(tǒng)
點贊
收藏

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