久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Windows與Docker有多少進程

154次閱讀
沒有評論

共計 3503 個字符,預計需要花費 9 分鐘才能閱讀完成。

這篇文章主要介紹“Windows 與 Docker 有多少進程”,在日常操作中,相信很多人在 Windows 與 Docker 有多少進程問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Windows 與 Docker 有多少進程”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!

Linux 和 Windows,Docker 里各有多少進程

在安裝配置 Container Host 的時候,經常報錯 Container OS Image 下載失敗(沒辦法,墻內的緣故)。

什么是 Container OS?顧名思義,是從容器角度看到的 OS。

Container OS 實際是應用所依賴的用戶模式(User mode)OS 組件,對于 Windows 容器來說,例如 ntdll.dll、kernel32.dll 或者 coresystem.dll 之類的 System DLL。主機上的所有容器共享內核模式(Kernel mode)OS 組件,對于 Windows,就是 ntoskrnl.exe,還有驅動等。

例如對于以下命令,意味著 Windows 系統從 docker 映像中獲取 Windows Server Core 的用戶模式 OS 組件,并啟動 cmd 獲得 Shell。

docker run -it windowsservercore cmd

Linux 也是一理,如果運行以下命令,意味著從 docker 映像中獲取 Ubuntu 的用戶模式組件,并且啟動 Bash Shell。

docker run -it ubuntu /bin/bash

對于以上兩個容器,Linux 容器里的進程比較少,可以參考以下截圖:

而 Windows 容器,則情況略有不同。

在 Windows 主機上啟動 Process Explorer,可以看到這個 Windows 容器的進程相對多一些:

這是因為在 Windows 系統中,需要給應用提供一些用戶模式的系統服務,例如 DNS、DHCP、RPC 等服務,這樣從容器的角度來看,容器獲得了自己獨有的服務(一般是在各自的 svchost 或者其他服務宿主進程里運行),構成了所謂的 Container OS。

我們可以用 PowerShell 命令查看容器內部啟動的 Windows 服務,大概有 27 個,參考附圖。

很可惜,這個版本的 Windows docker 里,雖然有遠程桌面服務,但是目前還不支持遠程桌面到容器,所以無法使用容器應用的圖形化界面。

容器里的應用,到底應該啟動多少 Windows 服務?由于 Windows 服務的具體作用是非文檔化的,所以不像 Linux 可以做到最精簡。但是由于這些服務幾乎不占用什么額外的資源,對于容器性能沒有影響。

Windows 容器的進程如何隔離

由于在最新的測試版本里,容器對象的權限設置有了改變,只有 SYSTEM 權限才能查看。所以要查看 Windows 容器的進程隔離,需要用 SYSTEM 權限啟動 Winobj。這可以借助 Psexec 來實現:

Psexec -i -d -s winobj.exe

可以看到 Windows 對象空間里多了一個 Containers 的節點,其下有若干個 GUID 分支,這些 GUID 代表系統里的容器。其下每個容器有自己獨立的 BaseNamedObjects 等命名空間,包括互斥信號量、內存 Section、事件等。可以用 PowerShell 查看容器的 GUID,參考附圖。

每個容器節點下,有自己的 Session 分支,例如該容器,占據了 Windows 系統的 Session 2。如附圖所示。

這就是為什么,不管用任務管理器,還是 PowerShell,抑或是 Process Explorer 等工具,我們都在 Windows 主機里看到容器里的所有進程都會標記 Session 為 2。借助 Process Explorer,我們可以看到容器里的進程,所打開的 Handle,其中就指向先前所看到的 Windows 容器對象命名空間。

同時還能看到,容器進程所在的 WindowStation 并不是 WinSta0,而是 Service-0x0-3e7$,3e7 的 10 進制等于 999,等于九五之尊,這是 SYSTEM 服務所在的窗口站。所以容器進程無法在 Windows 桌面上擁有圖形化界面。

還可以查看一個有意義的對象,Windows 容器所掛載的主機目錄,類似于 Linux 容器的 Volume。

Windows 容器的文件系統如何隔離

和 Linux 一樣,Windows 容器映像采用分層的文件系統,基于映像創建容器后,相當于在只讀的分層文件系統上再覆蓋一層可讀寫的文件系統層。如果要修改的文件在最上層的可讀寫層里沒有,則沿著分層的 Layer 找到目標文件后,將其用 COW(Copy on write:寫時復制)復制到可讀寫層再修改。

讓我們進入到 Windows 主機的以下目錄:
C:\ProgramData\Microsoft\Windows\Hyper-V\Containers
該目錄下列出所有通過 PowerShell 命令創建的容器文件。其下有文件夾和文件,都以容器的 GUID 來命名。

Windows 與 Docker 有多少進程

其中的 926A300B-ACB7-4B28-9D86-45BF82C1211C.vhdx 就是該容器的最上層的可讀寫層,是一個 VHDX 文件。記住該可讀寫層并不是一個完整的文件系統,它需要和 Image 的現有文件系統組成 Union File System。如果嘗試雙擊該 VHDX(只能嘗試掛載停止狀態的容器 VHDX),試圖掛載到 Windows 系統,會彈出以下報錯信息,提示該虛擬硬盤無法掛載。

Windows 與 Docker 有多少進程

Image 的文件系統位于以下路徑(Windows Server Core 的 Container OS 文件):
C:\ProgramData\Microsoft\Windows\Images\CN=Microsoft_WindowsServerCore_10.0.10586.0\Files
如果用 Process Explorer 查看容器進程訪問的 Dll,可以看到其訪問的路徑為 Container OS 文件。

Windows 與 Docker 有多少進程

如果是用 docker 命令創建的進程,道理類似,但是其可讀寫層文件系統位于以下路徑:
C:\ProgramData\docker\windowsfilter

Windows 與 Docker 有多少進程

Windows 容器還有注冊表

和 Linux 不一樣,Windows 容器還需要考慮注冊表的隔離問題。和文件系統命名空間隔離一樣,注冊表命名空間隔離也采用類似 Union FS 形式。下面讓我們進入 PowerShell 命令創建的 Windows 容器文件夾內部。
C:\ProgramData\Microsoft\Windows\Hyper-V\Containers\926A300B-ACB7-4B28-9D86-45B

Windows 與 Docker 有多少進程

在這個 Hives 文件夾下方,有很多命名為 *_Delta 的文件,這是容器所訪問的注冊表配置單元文件。

Windows 與 Docker 有多少進程

從命名方式中可以看到,容器的注冊表和文件系統一樣,也采用分層架構,最上層的是可讀寫的注冊表命名空間。而 Image 映像也有只讀部分的注冊表空間,路徑如下。
C:\ProgramData\Microsoft\Windows\Images\CN=Microsoft_WindowsServerCore_10.0.10586.0\Hives
在 Process Explorer 里可以看到可讀寫層、只讀層注冊表合并后所加載的內容。

Windows 與 Docker 有多少進程

Docker 命令所創建的容器,方法類似,位于類似以下路徑:

Windows 與 Docker 有多少進程

Windows 容器的資源限制

大家知道,Docker 可以調用 CGroup 技術來限制 Linux 容器的 CPU、內存等資源占用。而在 Windows 容器里,內存資源的限制,則是通過 Windows 的 JO(作業對象)技術來實現。可以參考以下技術來限定 Windows 容器的 CPU、內存和磁盤 IO。例如可以將容器的內存限定為最大占用為 5GB。
https://msdn.microsoft.com/en-us/virtualization/windowscontainers/management/manage_resources?f=255 MSPPError=-2147217396
然后用 Process Explorer 打開任意一個容器進程的屬性對話框,切換到 Job 標簽頁。

Windows 與 Docker 有多少進程

可以看到所有容器進程共享一個作業對象,而且該作業對象的內存限額 (Job Memory Limit) 為 5GB。

到此,關于“Windows 與 Docker 有多少進程”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計3503字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 遂昌县| 禄劝| 元谋县| 南丹县| 荔波县| 肇东市| 米泉市| 东丽区| 阿瓦提县| 大兴区| 肥城市| 黄冈市| 金川县| 通海县| 汾阳市| 富民县| 上饶县| 高清| 沾益县| 肥东县| 台东市| 阳西县| 吉木萨尔县| 高密市| 佛教| 辉南县| 庐江县| 神农架林区| 阿勒泰市| 香河县| 荃湾区| 洱源县| 吐鲁番市| 新乐市| 聂荣县| 小金县| 贡山| 九寨沟县| 建德市| 邵阳县| 民乐县|