翻譯自:
linux容器佔整個容器生態系統的很大比例,是開發人員體驗和生產環境的基礎。但是,由於容器與容器主機共享核心,因此不能直接在windows上執行linux容器。這是虛擬化的發展方向。
現在可以使用docker for windows和hyper-v這兩種方法執行linux容器:
在完整的linux vm(虛擬機器)中執行linux容器 - docker在windows上的通用做法。
使用hyper-v隔離(lcow)執行linux容器- 這是docker for windows中的新選項。
本文概述了每種方法的工作原理,提供了何時選擇哪種解決方案,分享工作進展。
要在linux vm中執行linux容器,請按照docker的入門指南中的說明進行操作。
docker已經能夠在windows桌面上執行linux容器,因為它是在2023年首次發布(在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
要嘗試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操作需要進行一些轉換。某些檔案系統操作當前已部分或未實現,這可能會導致某些應用程式不相容。
這些操作當前不適用於裝入卷:
還有一些尚未完全改善:
這些應用程式都需要卷對映,無法正常啟動或執行。
docker blog describing lcow
linux container video
linuxkit lcow-kernel plus build instructions
現在,我們建議將moby vm方法執行linux容器給以下人員:
想要乙個穩定的容器環境。這是docker for windows預設的。
執行windows或linux容器,但很少同時執行。
linux容器之間有複雜或自定義的網路要求。
linux容器之間不需要核心隔離(hyper-v隔離)。
想要測試我們的最新技術。
同時執行windows和linux容器。
linux容器之間需要核心隔離(hyper-v隔離)。
當我們研究在windows上執行linux容器的方法時,我們考慮了wsl。最終,我們選擇了基於虛擬化的方法,以便windows上的linux容器與linux上的linux容器保持一致。使用hyper-v還可以使lcow更安全。我們可能會在將來重新評估,但目前,lcow將繼續使用hyper-v。
譯者 ps:今天是情人節,,單身狗在寫部落格 >.<
linux上執行windows命令
場景 在pipeline指令碼整合部署中需要新增dns a記錄,dns是windows上搭建的,指令碼跑在linux上,跨平台執行命令,方案如下 首先實現在windows系統中命令列執行新增dns a記錄 dnscmd dns recordadd 域 主機名 a ip c users adminis...
Windows上執行linux命令
什麼都不做的時候,提示這個。在彈出的 啟用和關閉windows功能 然後在電腦的商店中搜尋bash 彈出的這些都是可以在windows上執行linux命令的軟體,第乙個評分最高,所以我就選第乙個了。然後點選安裝 安裝的過程中,配置一下使用者名稱和密碼就行了。安裝執行之後,發現執行的shell的介面的...
在windows上開發linux程式
由於工作需要,希望能把現有 移植到linux。基於此目的,最近做了些調研和實驗。由於自己並沒有太多的linux下的工作經驗,所以不考慮直接在linux平台下工作,開發。好在現在vscode,visualstudio目前都支援跨平台開發。vscode有一套remote 的擴充套件,可以在本機linux...