Windows上的原生Linux容器(盆盆的Kubecon課程分享)

Copy (2) of IMG_1562.jpg

您測試過Windows上的Linux容器嗎?
docker

這是本週末剛閉幕的Kubecon大會,筆者在課堂上提出的問題。
windows


關於這個問題,你們常有的困惑就是,咱們爲何要在Windows上運行Linux容器?您能夠到如下地址下載PPT:服務器

PPT下載地址架構


歡迎關注個人公衆號:app

華來四.jpg


答案有如下三點:ide

  • 節省資源 Windows服務器上能同時運行Windows容器和Linux容器,而不是Windows容器只能在Windows主機上運行,Linux容器只能在Linux主機上運行,形成資源浪費。測試

  • 隔離能力 Windows上的Linux容器採用了Hyper-V容器技術,底層是小型的看不見的虛擬機,因此借用了hypervisor的隔離能力優化

  • 商業引擎 Windows服務器的docker引擎,會是企業版的引擎,由微軟和docker提供支持spa


接下來讓咱們看一下Windows是如何讓Windows容器和Linux容器水火共融的。這裏以一臺Windows 10機器爲例進行介紹,您也能夠在Windows Server 2019上測試。命令行


運行docker images,便可看到Windows 10上當前有Windows和Linux的容器鏡像。

0.png


甚至能夠測試最新的Windows Server 2019 Docker鏡像。其鏡像的pull地址分別爲:

mcr.microsoft.com/windows/nanoserver:1809

mcr.microsoft.com/windows/servercore:1809

mcr.microsoft.com/windows:1809


隨便運行一下docker run -it microsoft/nanoserver,便可啓動一個Windows容器。


再運行docker run -it supertest2014/nyan,便可同時啓動一個Linux容器。

1.png


咱們能夠經過docker ps命令查看這兩個容器的信息。

2.png


前面說過,Linux容器採用了Hyper-V容器的技術,底層是被優化過的小型Linux虛擬機,採用的是docker的LinuxKit(內核和引導文件位於C:\Program Files\Linux Containers)。可見很是精簡。

2018-11-18_9-05-46.png


如下是原理圖。其中綠色的部分就是傳統的Linux容器架構原理圖。

3.jpg


看看Windows上的Linux容器增長了哪些組件?首先是運行在Hypervisor之上,這樣隔離能力就和虛擬機同樣高,而不是採用共享內核的機制。其次因爲dockerd、containerd等服務運行在主分區(Host Partition,就是宿主機),經過HCS(宿主計算服務)和LinuxKit虛擬機上的GCS(來賓計算服務)通訊,這兩個組件是基於Hyper-V的VMBus高速內存總線!


怎麼查看Linux容器的詳細信息,經過Hyper-V管理器(GUI、PowerShell或者API)是看不到這臺微型虛擬機的任何信息的。


咱們須要藉助hcsdiag這個命令,首先運行hcsdiag list命令,查看服務器上的Hyper-V容器信息。

5.png


能夠看到其上運行了兩個容器,記住其中Linux容器的ID信息。再運行如下命令:

hcsdiag console -uvm ec1682e834415788943cd79fa56da656f5ffb689ea16a126c166eaba8812e54b


便可進入該微型虛擬機的命令行,運行ps aux,便可查看該虛擬機的進程信息,其中有/bin/sh -c nyancat,這就是Linux容器進程(加以命名空間保護),還有/bin/gcs,這就是GCS組件,還有hv_vmbus_con,這是虛擬機的硬件驅動。

6.jpg


這臺微型虛擬機不但內核精簡,自己的硬件配置也精簡,刪除了全部不支持Hyper-V enlightened的設備。


再運行mount,查看該虛擬機掛載的設備。能夠看到底部有若干/dev/pmem的存儲設備,只讀模式(ro),這就是Linux容器的基礎鏡像(包含多個layer的base image),加載到內存裏。

7.jpg


還有一個/dev/sda這樣的塊設備,是可讀寫設備(rw),這是容器頂部的layer。當容器被殺死時,該layer自動刪除,也能夠commit到鏡像倉庫,以實現快速代碼迭代。


用Process Explorer,能夠查看微型虛擬機的vmwp進程,能夠看到該進程的訪問句柄,下圖中紅色框裏的sandbox.vhdx,就是Linux容器的頂層可讀寫layer,而綠色框裏的多個layer.vhd文件,則是Linux容器的base image。這和上圖的命令行顯示是一一對應的。

8.jpg

Copy of IMG_1567.jpg

Copy of IMG_1568.jpg

相關文章
相關標籤/搜索