LCOW —— 單一Docker引擎下可同時執行Linux和Windows容器啦!
阿新 • • 發佈:2018-12-29
就在上週,Docker官方的master分支上新增了 LCOW (Linux Containers on Windows)功能。啟用這項功能,即可在單一的Docker引擎下,同時執行Linux和Windows容器。
下面趕緊跟小編一起,看看Windows 10將會發生哪些變化?
- 可以用Docker命令docker ps,列出所有正在執行的Linux或Windows容器。
-
在容器和主機之間通過儲存卷共享資料。
- 容器之間可以通過容器網路互相通訊。
- 通過將埠對映到主機,實現本地訪問。但目前,它還只是Windows 10 1803版預覽體驗計劃(Windows Insider)的一項功能。
執行Linux容器
現在,你需要指定docker pull --platform linux alpine
映象拉取完畢即可執行,無需指定 --platform 選項。
docker run alpine uname -a
另外,Windows上執行Linux容器需要一臺小型的Hyper-V虛擬機器。同時,LinuxKit專案提供了LCOW的映象,請參照: https://github.com/linuxkit/lcow 。
共享儲存
接下來我們看一下,如何用一種簡單的方式,實現不同平臺容器間的資料共享。方法是把Linux和Windows容器,繫結到同一個儲存卷。
下面的例子中,Linux和Windows容器通過主機的一個共享資料夾,實現資料共享。
首先,在Windows 10 上新建一個資料夾。
cd \ mkdir host
啟動Linux容器
在Windows 10主機上啟動一個Linux容器,並且將主機上的共享資料夾掛載到該容器的 /test 資料夾。docker run -it -v C:\host:\test alpine sh
我們在 /test 資料夾下,新建一個名為hello-from-linux.txt的檔案。
uname -a > test/hello-from-linux.txt
啟動Windows容器
在Windows 10主機上啟動一個Windows容器,並且將主機上的共享資料夾掛載到該容器的 C:\test 資料夾。docker run -i -v C:\host:C:\test microsoft/nanoserver:1709 cmd
我們在 C:\test 資料夾下,新建一個名為hello-from-windows.txt的檔案。
ver > test\hello-from-windows.txt
測試結果
上述兩個容器中新建的檔案,都儲存在Windows 10 主機的共享資料夾。PS C:\> dir host Directory: C:\host Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 1/21/2018 4:32 AM 85 hello-from-linux.txt -a---- 1/21/2018 4:33 AM 46 hello-from-windows.txt
在開發過程中,如果需要共享配置檔案或程式碼的話,這實在是太方便了有木有~
混合編排
值得一提的是,使用Docker Compose還可混合編排容器。下面是一個混合編排Linux和Window web伺服器的例子。version: "3.2" services: web1: image: nginx volumes: - type: bind source: C:\host target: /test ports: - 80:80 web2: image: stefanscherer/hello-dresden:0.0.3-windows-1709 volumes: - type: bind source: C:\host target: C:\test ports: - 81:3000 networks: default: external: name: nat
你也可以思考一下,如何編排一個Linux資料庫和Windows前端,反過來也一樣。
如何搭建你的LCOW測試環境
如果你想試著玩一下LCOW,建議使用Windows 10 1709虛擬機器。Azure
我在微軟Azure上用Windows 10 1709虛擬機器測試過LCOW。你可以選擇具有巢狀式hypervisor的V3 機器以便執行Hyper-V容器。容器和Hyper-V
首先,啟用容器和Hyper-V功能:Enable-WindowsOptionalFeature -Online -FeatureName containers -All -NoRestart Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All -NoRestart
LinuxKit
然後,為你的LCOW安裝一個LinuxKit映象。下面是我下載的最新版LinuxKit,你也可以自行從 linuxkit/lcow 下載。Invoke-WebRequest -OutFile "$env:TEMP\linuxkit-lcow.zip" "https://23-111085629-gh.circle-artifacts.com/0/release.zip" Expand-Archive -Path "$env:TEMP\linuxkit-lcow.zip" -DestinationPath "$env:ProgramFiles\Linux Containers" -Force
建立Docker
現在,你可以下載並安裝Docker引擎了。Invoke-WebRequest -OutFile "$env:TEMP\docker-master.zip" "https://master.dockerproject.com/windows/x86_64/docker.zip" Expand-Archive -Path "$env:TEMP\docker-master.zip" -DestinationPath $env:ProgramFiles -Force
接下來,安裝Docker service並開啟實驗功能。
. $env:ProgramFiles\docker\dockerd.exe --register-service --experimental
緊接著,配置PATH以便使用Docker CLI。
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";$($env:ProgramFiles)\docker", [EnvironmentVariableTarget]::Machine)
恭喜你!現在可以重啟機器了。重啟過程中會自動更新容器和Hyper-V的配置。如果一切順利,重啟完後Docker engine應該已經起來並處於執行狀態了,這時你可以在PowerShell終端使用Docker CLI。
本地的Vagrant環境
如果你的 Vagrant 安裝了Hyper-V或VMware,那就更方便了。只需幾個命令,就可輕鬆搭建本地測試環境。你只需要從我的GitHub下載包含LCOW環境的docker-windows-box,執行以下命令就可以了。
git clone https://github.com/StefanScherer/docker-windows-box cd docker-windows-box cd lcow vagrant up
如果你的Windows 10虛擬機器上沒有Vagrant base box,系統會自動下載安裝。如果已經下載了,則只進行安裝。
總結
未來幾個月,隨著這些Docker新功能加入到Windows,Windows 10無疑將成為2018年最具吸引力的開發者平臺。想象一下,你用 docker-compose.yml 編排Linux和Windows容器,通過Visual Studio Code實時除錯你的應用程式,等等。
如果您喜歡這篇文章,請分享給您的朋友。如果想了解Windows容器的最新情況,請關注原文作者的推特 @stefscherer 。