Windows Server容器初探 -ASP.NET容器化
來自: http://dockone.io/article/1042
【編者的話】本文為Windows Server環境下的容器體驗紀實文章,旨在跟大家分享一些體會和經驗,相關視頻演示及說明將于下周更新,歡迎大家一起討論。
作者:龍彬(Cloudsoar 云舒網絡)
注:文章由云舒網絡原創,轉載請注明出處
一.Windows容器概述
當今世界,容器技術越來越火熱,微軟也終于通過Windows Server 2016進軍容器市場。Windows 容器包括兩個不同的容器類型:
1.Windows Server容器:
通過進程和命名空間隔離技術提供應用程序隔離。Windows Server容器與容器主機共享內核。
2.Hyper-V 容器 :
通過在高度優化的虛擬機中運行每個容器,容器主機的內核不與Hyper-V容器共享。
下圖大致反映了Windows容器的一些基本原理
Windows 容器可以通過Powershell或是Docker進行管理,我們關注的重點在Docker方面。
二.試驗環境
此次試驗在一臺服務器上的Hyper-V VM中進行。
操作系統:Windows Server 2016 TP4(英文版)
硬件配置:Intel Xeon E5-2650 v3、內存128G、硬盤 500G固態 1.5T機械
Hyper-V VM: Windows Server 2016 TP4(英文版)
用戶權限:管理員
三.具體步驟
1 .安裝Hyper-V VM并準備Windows容器運行環境
Windows容器的運行需要依賴于容器操作系統基礎鏡像;微軟提供了一個Powershell腳本,執行該腳本成功后會創建一個Hyper-V虛擬機,同時在該虛擬機中安裝好Windows容器所需要的所有依賴和配置。
以下是具體步驟:
1.1 檢查物理機Hyper-V服務是否安裝;如果沒有,需要先安裝。
1.2. 以管理員身份運行PowerShell。
C:> powershell.exe
1.3. 檢查是否存在虛擬交換機,如果沒有請先創建一個。
1.4. 下載安裝腳本。
wget -uri https://aka.ms/tp4/New-ContainerHost -OutFile c:\New-ContainerHost.ps1
1.5. 下載完成后執行該腳本
c:\New-ContainerHost.ps1 –VmName cloudsoar27 -WindowsImage ServerDatacenterCore -Hyperv
該腳本執行的時候會創建Hyper-V虛擬機,下載并配置Windows容器組件。由于下載量較大,網速慢,需耐心等待。 也可以使用已經下載好的文件(如下圖):
注意那兩個文本文檔,是腳本判斷下載是否結束的依據,如果缺失會提示錯誤的版本。在這里感謝@盆盆大神提供的鏡像,省去了我們多少個漫漫長夜的等待!
注:鏡像下載路徑為: http://pan.baidu.com/s/1dDXjTDZ
當Hyper-V VM創建成功后,腳本后面的步驟如果運行失敗了,不用重新運行腳本,啟動Hyper-V VM在里面執行Install-ContainerHost.ps1即可。由于網絡原因執行失敗可多試幾次。關于環境搭建的詳情可參考 https://msdn.microsoft.com/en- ... up%23
2.Docker命令兼容性測試
Windows Server容器支持以Docker原生命令進行操作,本次所測試的命令包括build, commit, create, exec, images ,logs, ps, pull, rename, restart, rm, rmi, run , start, stop, version等,均能正常執行(commit的速度有點慢)。官網上明確指出dockerhub相關命令不支持。嘗試docker login命令得到如下結果:
可以使用docker search * 列出可用鏡像列表(事實上把*換成任意字符串比如’asdfasdfasdf’,依舊會得到以下列表)
docker pull命令只能拉取以上列表中的鏡像,類似docker pull redis的命令會得到如下結果:
上周我在物理機上(也是本次這臺服務器)直接搭建過Windows Container的運行環境,測試時發現容器中的命令行比較“脆弱”,容易發生顯示錯位、命令自動拼接到上一條的情況。有時候創建帶有交互式命令的容器時進去后會立馬退出,在容器中安裝服務時會卡住不動(甚至使用get-windowsfeature web*之類的查看命令也會卡住)。在Hyper-V VM 中除了有時啟動帶有交互式終端命令的容器它會自動退出這個問題依然存在外,其他問題暫時還未發現。看來Windows Server Container在Hyper-V虛擬機中的穩定性比在物理機上好。
3. Windows Server Core IIS .NET框架基礎鏡像
Windows容器也支持commit與Dockerfile兩種方式構建鏡像,本節主要介紹使用Dockerfile的方式構建Windows Server Core IIS .NET Framework基礎鏡像,后續將在該鏡像的基礎上構建ASP.NET應用,如下是Dockerfile文件內容。
Dockerfile主要在Windowsservercore的基礎上安裝了.NET Framework 3.5,IIS 10.0 以及asp相關應用開發組件。最先用commit方式構建鏡像的時候,在容器中安裝web-asp-net失敗的原因已經找到了,應該是安裝web-asp-net需要依賴.NET Extensibility 3.5,如果這個組件沒有安裝就會先裝這個,但是這個組件依賴于.NET Framework 3.5. 在Windowsservercore啟動的容器中默認安裝的.NET Framework 版本為4.0而不是3.5,導致web-asp-net安裝失敗,所以要先安裝.NET Framework 3.5。這里裝多個版本主要是為了兼容不同版本的asp.net應用,當然也可以根據需要選擇性安裝。
docker build -t iisbase c:\iisbase
4 部署ASP.NET應用
本節基于3中創建的基礎鏡像iisbase構建ASP.NET應用鏡像,Dockerfile如下:(source為使用vs2015發布的一個簡單的asp.net示例應用。)
使用docker run --name test -it -p 8080:80 asp45demo cmd創建容器。然后通過192.168.0.179:8080(Hyper-V VM IP)訪問。
有一個比較令人困惑的地方就是鏡像的大小,感覺太‘重’了點。
注:Windowsservercoreiis為commit構建,安裝了web-server,web-asp,web-asp-net45。iisbase為Dockerfile構建,安裝了web-server,web-asp,web-asp-net45,.net 3.5, web-asp-net。如果不需要支持低版本的asp.net應用,基于Windowsservercoreiis會小不少。
四.總結
Windows Server Container在Hyper-V VM中的表現比直接在物理機上搭建Docker環境好上不少,常用功能基本都有了。等后續進一步完善Docker命令的兼容性、容器的穩定性以及豐富應用鏡像之后,相信市場前景還是很不錯的,期待正式版的推出。后續將進一步探究如何使用Windows容器實現開發、測試以及生產的一體化流程,敬請期待!
本文電子書下載:
網頁下載: http://www.cloudsoar.com/down/ddoc/v1.1/
博客期刊:h http://www.cloudsoar.com/about ... v1.1/
云盤下載: http://pan.baidu.com/s/1jHfP9Dc
溫馨提示:
下周我們將發布Windows容器體驗操作視頻及解說文檔,敬請關注云舒網絡官方博客及其它信息,也可加群參與討論!
云舒網絡攜手Rancher Labs推出【Rancher | 實戰群】微信群,在線為您分享Docker技術干貨,更有往期回顧精選期刊等你拿!
加微信群方法:
1.關注【云舒網絡】公眾號
2.留言”我要加群“
QQ群號:216521218