翻譯自:https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/linux-containers
Linux容器占整個容器生態系統的很大比例,是開發人員體驗和生產環境的基礎。但是,由於容器與容器主機共享內核,因此不能直接在Windows上運行Linux容器。這是虛擬化的發展方向。
現在可以使用Docker for Windows和Hyper-V這兩種方法運行Linux容器:
- 在完整的Linux VM(虛擬機)中運行Linux容器 - Docker在Windows上的通用做法。
- 使用Hyper-V隔離(LCOW)運行Linux容器- 這是Docker for Windows中的新選項。
本文概述了每種方法的工作原理,提供了何時選擇哪種解決方案,分享工作進展。
Moby VM 中的Linux容器
要在Linux VM中運行Linux容器,請按照Docker的入門指南中的說明進行操作。
Docker已經能夠在Windows桌面上運行Linux容器,因為它是在2016年首次發布(在Hyper-V隔離或LCOW可用之前),使用在Hyper-V上運行的基於LinuxKit的虛擬機。
在此模型中,Docker Client在Windows桌面上運行,但在Linux VM上調用Docker守護程序(Docker Daemon)。
在此模型中,所有Linux容器共享一個基於Linux的容器主機並且所有Linux容器:
彼此和Moby VM共享內核,但不與Windows主機共享。
與Linux上運行的Linux容器具有一致的存儲和網絡屬性(因為它們在Linux VM上運行)。
這也意味着Linux容器主機(Moby VM)需要運行Docker守護程序和所有Docker守護程序的依賴項。
要查看您是否正在使用Moby VM運行,請使用Hyper-V Manager UI或在管理員權限的PowerShell窗口中運行Get-VM
,檢查運行 Moby VM
具有Hyper-V隔離的Linux容器
要嘗試LCOW(Linux container on windows),請按照此入門指南中的Linux容器說明進行操作
具有Hyper-V隔離功能的Linux容器在優化的Linux VM中運行每個Linux容器(LCOW),並且只有由操作系統來運行容器。與Moby VM方法相比,每個LCOW都有自己的內核和自己的VM沙箱。它們也是由Windows上的Docker直接管理的。
仔細研究一下Moby VM方法和LCOW之間的容器管理有何不同,在LCOW模型中,容器管理保留在Windows上,每個LCOW管理都通過GRPC和containerd進行。這意味着用於LCOW的Linux發行版容器可以擁有更小的體積。目前,我們正在使用LinuxKit來優化發行版容器的使用,但其他項目如Kata也正在構建類似的高度調整的Linux發行版(Clear Linux)。
以下是每個LCOW的詳細信息:
要查看您是否正在運行LCOW,請導航至 C:\Program Files\Linux Containers
。如果Docker配置為使用LCOW,那么這里將包含一些文件,其中包含在每個Hyper-V容器中運行的最小LinuxKit發行版。請注意,優化的VM組件小於100 MB,遠小於Moby VM中的LinuxKit映像。
工作進展
LCOW正在積極發展中。跟蹤GitHub上 Moby項目的持續進展
綁定 mounts
docker run -v ...
綁定卷並將文件存儲在Windows NTFS文件系統上,因此POSIX操作需要進行一些轉換。某些文件系統操作當前已部分或未實現,這可能會導致某些應用程序不兼容。
這些操作當前不適用於裝入卷:
- MkNod
- XAttrWalk
- XAttrCreate
- Lock
- Getlock
- Auth
- Flush
- INotify
還有一些尚未完全改善:
- GetAttr - Nlink計數始終報告為2
- Open - 僅實現ReadWrite,WriteOnly和ReadOnly
這些應用程序都需要卷映射,無法正常啟動或運行。
- MySQL
- PostgreSQL
- WordPress
- Jenkins
- MariaDB
- RabbitMQ
額外的信息
LinuxKit LCOW-kernel plus build instructions
何時使用Moby VM vs LCOW
何時使用Moby VM
現在,我們建議將Moby VM方法運行Linux容器給以下人員:
想要一個穩定的容器環境。這是Docker for Windows默認的。
運行Windows或Linux容器,但很少同時運行。
Linux容器之間有復雜或自定義的網絡要求。
Linux容器之間不需要內核隔離(Hyper-V隔離)。
何時使用LCOW
現在,我們向以下人士推薦LCOW:
- 想要測試我們的最新技術。
- 同時運行Windows和Linux容器。
- Linux容器之間需要內核隔離(Hyper-V隔離)。
我們考慮的其他選擇
當我們研究在Windows上運行Linux容器的方法時,我們考慮了WSL。最終,我們選擇了基於虛擬化的方法,以便Windows上的Linux容器與Linux上的Linux容器保持一致。使用Hyper-V還可以使LCOW更安全。我們可能會在將來重新評估,但目前,LCOW將繼續使用Hyper-V。
如果您有想法,請通過GitHub或UserVoice發送反饋。我們特別感謝您對您希望看到的具體體驗的反饋。
譯者 PS:今天是情人節,,單身狗在寫博客 >.<