DockOne技術分享(十三):十個問題帶你瞭解Windows Docker

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
【編者的話】微軟在5月份Build大會上的官方說法,說是這個夏天會放出Windows Server Container的測試版。也就是說,目前我們還無法看到Windows Docker的測試版本,無法直接上手測試。

微軟在5月份Build大會上的官方說法,說是這個夏天會放出Windows Server Container的測試版。也就是說,目前我們還無法看到Windows Docker的測試版本,無法直接上手測試。接下來我就大家關心的十大問題進行介紹:

1. Windows Docker和Hyper-V有啥區別?

Hyper-V和VMware/Xen/KVM等類似,都是硬體虛擬化,安全但笨重。

Windows Docker是OS虛擬化技術,具備一定的隔離能力,效能更好、容易移植。

兩者不是互相取代的關係。

注意:Windows Docker並不是我們在Docker 1.6時見到的Windows Docker Client,也不是Boot2docker這個Windows下的linux虛擬機器,而是真正的Windows版本的Docker。其實其正式名稱並不叫Docker,而是叫做Windows Server Container,還有Hyper-V Container,有2個產品,其中Windows Server Container類似於linux Docker,而Hyper-V Container有些類似於clear linux或者Hyper Docker。


這是因為Docker是商標名稱,微軟不能直接拿來使用。

2. Windows Docker和Softgrid(APP-V)/Thinstall等有啥區別?

Docker是OS虛擬化,主要情境是服務端應用,這些容器(應用)之間通過標準的網路介面進行通訊,好像虛擬機器一樣。

Softgrid是應用程式虛擬化,主要用於用戶端應用部署。例如Office,這些應用在同一個會話裡運行,完全就是傳統的應用,彼此之 間可以進行處理序間通訊,例如Word可以OLE調用Excel的表單等等。不同的進程,看到的檔案系統不會隔離。適用於批量部署用戶端應用。

3. 容器和沙箱是什麼關係?

曾經看到一句很棒的評語,必須分享給諸位:

Sandboxing is focused on just security with code isolation. Containers have some security code isolation, but this is not the only or primary purpose. One way to think about containers is as a layered/quarantined filesystem which makes it quick/easy/lightweight to run an application and also makes the application (in the container) very portable.
從中我們可以看出,在Windows 10裡,IE的繼任者Edge瀏覽器就採用了沙箱技術。

同樣在保護模式下啟動並執行Office文檔,也運行在 沙箱裡。如所示。

而容器,則還必須要在移動能力上有所考量,確保讓應用,也能變成按需遞交的動態服務。以前的硬體虛擬化,能將OS、App等變成文檔,從而把伺服器資源變成按需遞交的服務,現在Windows Docker和linux一樣,也能變成image,變成文檔,變成按需遞交的動態服務。

4. Windows Docker和其他OS虛擬化工具之間是什麼關係,例如很早就聽聞的VPS等?

從技術角度看,底層原理大同小異。看圖吧。

Docker和其他OS虛擬化技術一樣,技術實現大致差不多。關鍵看誰能帶動生態圈,能夠贏得其他廠商的支援。同時Docker的分層檔案 系統實現,也是其特別引人入勝的地方。這個的下載地址在這裡。

5. Windows Docker分層檔案系統?

先看看Linux的實現。DaoCloud的大牛孫宏亮老師指出:假設我們下拉了Ubuntu:14.04映像,並通過命令 docker run –it ubuntu:14.04 /bin/bash將其啟動運行。則Docker為其建立的rootfs以及容器可讀寫的檔案系統。參考這張

從容器的視角來看,雖然只有一個邏輯的完整檔案系統,但該檔案系統由“2層”組成,分別為讀寫檔案系統和唯讀檔案系統。孫老師的雄文連結在此。

Windows Docker採用類似的分層檔案系統。參考。

Windows Docker採用NTFS檔案系統的重解析點技術(reparse point),頂層的沙箱層(sandbox layer)是可讀寫的,只允許該容器自己佔用,而其他層 則是唯讀。在這張圖中,底層的基礎OS層和中間的應用程式架構層都是唯讀,而頂層的沙箱層則可讀寫,在 容器的視角看來,它獨佔了完整的檔案系統。

這有點類似於Hyper-V的差異磁碟鏈(頂部的子盤才能讀寫,其上方的所有父盤和Base盤都是唯讀)。

Windows Docker的分層檔案系統,我是將其理解為類似符號連結(僅僅用來協助理解,不要真的輕信),當頂層的沙箱層開啟檔案時, 相當於開啟一個符號連結,而嘗試修改時,則COW(Copy on write)。到底採用什麼底層檔案系統技術,如何?多個容器並發訪問只 讀Layer檔案的效能,如何cache等,目前一概不知道。sorry!

6. Windows Docker的檔案系統隔離

前段時間的熱門話題,除了股票,就要算是某線上旅遊商的悲劇了,坊間甚至傳聞其為資料誤刪!!!

有客戶曾經問到:Docker能否避免這種悲劇?其實Docker和虛擬機器一樣,都替代不了容災和備份的機制。不過Docker確實有檔案系統隔離 的能力。我在Build大會裡看到,示範者在Windows Container裡執行刪除C盤根目錄下所有檔案和註冊表索引值,儘管這個容器被毀了 ,但是根本不會影響其他容器,更不會影響主機,這和linux Docker一樣。看圖片吧。

7. IPC隔離機制

在另一位孫老師,孫建波老師的文章裡我們看到,linux Docker採用了IPC隔離機制。而Windows Docker也採用類似的隔離機制。這個機制就是所謂的會話隔離。

那麼Windows裡,哪些技術會用到會話隔離呢,盆盆簡單總結一下:
  • 首先是終端服務,會話就是為了這個技術而發明的。
  • 快速切換使用者,這和終端服務實際上是一樣,只不過快速切換使用者只會提供最新登入使用者的案頭(shell)。
  • 從Windows Vista開始,系統級進程和服務,運行在會話0裡,這就是為什麼我們無法再用"mstsc /console"命令來登入到伺服器的控制台會話。
  • 從Windows 8開始,Metro Application(平板專用的應用),也採用會話隔離技術。


也就是說,會話是為了終端服務這種多使用者機制來準備的。

用Sysinternals Suite工具包裡的Winobj這個小工具,可以看到會話隔離的效果。

在圖中可以看到,不同會話裡擁有不同的對象命名空間,例如不同容器,有自己獨立的視窗站(終端服務,其他場合只有當前登入用 戶才有Winsta視窗站),BaseNamedObjects目錄,包含事件、互斥訊號和記憶體段等對象。不同會話裡的應用,不能夠發送視窗訊息(Window Message,以防止粉碎攻擊)。

Windows Docker沿用了會話隔離技術,不同容器在同一個Windows主機上訪問同一個命名物件,就不會導致衝突。

在Build大會的示範裡,啟動了2個容器,都是從同一個Windows Server Core映像裡建立出來。在其中一個容器裡運行tasklist命令, 顯示當前的進程資訊,包括會話。

在這個中,我們可以看到該容器運行在會話14裡。

在另外一個容器裡同樣運行tasklist。可以看到該容器運行在會話15裡。

類似於兩個容器,分別通過遠端桌面訪問一樣,拿到不同的會話(session),從而獲得namespace隔離能力。

從兩個裡能看到什嗎?其中System和空閑進程是共用的,這說明Docker是共用宿主機的核心。當然進程號都一樣不代表什麼,因 為所有Windows裡,這兩個進程的PID都一樣!而每個容器都有自己的svchost進程、csrss進程和wininit進程等。這些進程都是 per-session的。

8. Windows Docker能顯示圖形化介面嗎?

傳統的Windows應用大多是有GUI的,所以這些應用可能需要通過圖形化方式進行遠程操控。Windows Docker會通過容器的RDP服務連 接上來。

圖中顯示通過RDP服務串連到Process Explorer這個帶GUI的系統進程管理工具。由於RDP實際上就是終端服務,所以Process Explorer這個圖形化進程相當於又運行在一個新的會話裡了!這個說起來有點拗口。

從這張圖裡我們可以看出,由於Process Explorer是在終端會話裡開啟的,所以我們可以在容器的工作管理員裡看到有兩個會話:
  • 會話14是Docker自己的會話,在這裡嘗試啟動Process Exploer,但是啥都看不到,這個是正常的,因為圖形化介面無法在Docker用戶端 裡顯示,Linux也採用類似VNC/RDP等辦法開專門的通道訪問。
  • 而會話15則是通過RDP訪問的會話


9. 建立Windows Docker

和linux Docker,Windows Docker(記住有兩個產品,Windows server container和hyper-v container)完全支援linux Docker的介面和工具集。就好比電視機和投影儀,其內部實現固然大相徑庭,然其和電腦的之間的介面則幾乎完全一致。

建立Windows 容器,和linux一樣,有Docker file,直接Docker build,產生Image。

Docker File的簡單範例:
From Windowsservercore
WORKDIR \
COPY bin\Debug\ \Deapp
CMD \DemoApp\Demoapp.exe

今後微軟的Windows azure雲,可以直接支援Docker,不管是Windows還是linux,都可以直接用最新的visual studio把代碼簽到azure的linux或者Windows容器裡。當然也可以直接用azure的visual studio online服務。

10. Windows Docker不同版本,以及linux之間異同

首先分享靈雀雲老大左玥老師的PPT。

可以看到session和JO,是Windows Docker的隔離技術,同時JO技術類似於linux裡的CGroup。可以參考chrome的相關技術。chrome就是用到了不少Windows的隔離技術。

再看一張圖片。

從這裡可以看出Windows Docker不同版本和linux之間的異同點。其中Hyper-V Container的安全能力高於Windows Server Container。

Windows Server Container和Hyper-V Container之間的差異,可以參考這個圖片。最大的差別在於,hyper-v container支援多租戶安全能力,同時支援加域。而Windows server container則不能加域,這意味著如果這個應用需要加域的話,則無法用Windows Server Container。

Q& A

問: 從前部分看講解的來看,個人覺得Windows Server Docker主要用到的是Dandbox沙箱技術,對嗎?
答:應該說和Linux Docker一樣,既有沙箱技術,又有分層檔案系統。

問: Windows也有在容器裡面使用的Image了嗎?下載下來之後在liunx的Dockr裡面能用起來嗎?linux的Image在Windows Server Docker裡面能跑起來嗎?
答:Windows Docker和linux不相容。不能將linux image放在Windows裡運行。因為Docker是共用核心的,兩者實現完全不同。

問:支援GUI嗎?
答: 能支援GUI,就和Linux docker一樣。但是由於Docker Client本身不能支援GUI,所以需要用RDP Client串連。

問:Windows的Docker只是用Windows做基礎的,沒有像linux那樣去抹平不同發行版的差異?
答: 由於Docker實質是OS虛擬化技術,所以依賴於OS kernel,Windows和Linux互相不相容。目前的其中一個解決辦法是,從代碼源頭解決,例如同一個代碼,既可以簽入到Windows容器,也可以嵌入到linux容器上(跑Linux版本的.NET)。

問:Win PC上是不是不用再像目前安裝Docker那樣先安裝虛擬機器之類的?
答:不是,Windows Docker是原生的Windows版本的Docker機制,和linux Docker等價,不是採用Boot2Docker這樣的虛擬機器。

問:Windows Docker是已經有Windows的image嗎?
答:對,會有Windows sever image,例如我們熟悉的Windows server core,還會有今後的Windows nano server。

問:這些image是不是都不帶GUI?管理起來的話,微軟目前有自己的容器管理平台了嗎?
答:可以有GUI,但是雲端的環境,傾向於弱化GUI,這就是微軟為什麼要推出完全沒有GUI的Windows Nano Server的原因,Nano Server,不但沒有GUI,連Console都沒有,需要通過PowerShell命令列等遠端管理。另外,Windows Docker支援傳統的Linux Docker介面。

問:Windows Docker有哪些比較典型的應用情境嗎?
答:Windows Docker的典型情境,和Linux幾乎一樣,都是實現應用的動態服務化,打斷應用和底層硬體裝置之間的緊密耦合的紐帶。

問:Windows Docker有哪些比較典型的應用情境嗎?
答:Windows Docker的典型情境,和Linux幾乎一樣,都是實現應用的動態服務化,打斷應用和底層硬體裝置之間的緊密耦合的紐帶。

===========================
以上內容根據2015年7月21日晚群分享內容整理。分享人 彭愛華,微軟雲端運算解決方案顧問,微軟進階講師。 DockOne每周都會組織定向的技術分享,歡迎感興趣的同學加:liyingjiesx,進群參與,您有想聽的話題可以給我們留言。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.