Windows docker 學習
本人行業屬於智慧製造,偏向工廠應用,客戶端程式全部是.Net 的 WinForm;本系統的後臺是.Net,多系統互動的有java的;因系統釋出效率問題,想採用docker Windows 的生產力環境;
docker 技術原理,和好處在此不過多描述,大家都說好;
主要學習 Windows containers的應用,是 Windows原生容器;不是linux,不是linux,不是linux,重要的事情說三遍;
下面把學習中遇到的坑描述好,避免大家走彎路;
1. 先講關於Docker For Windows
Microsoft是所有軟體行業迴避不掉的,Docker官方開始支援Windows系統;
技術有2種,
1是docker toolbox,使用 Oracle VM Virtualbox執行一個可以部署docker的虛擬機器,僅支援linux container;
2是 Docker for Windows Desktop,使用hypep-v執行一個可以部署docker的虛擬機器,可以切換linux container和Windows container,同時只能1種,不同2個同時存在;
2. .Net 和 .Net core docker 區別
.Net core 是.Net的跨平臺子集,可以支援linux 當然可以Windows;asp.net core 可以執行在linux container 的docker環境;
.Net core技術已經非常成熟了,我在園子部分頁面的右下角看到了 asp.net core的標記,不知道是不是園子全是asp.net core的環境;
.Net是不能執行在linux container 的docker環境;只能執行在 Windows container,微軟原生的容器中;
所以,支援 .Net core的docker是有2套的,1是linux container 2是Windows container,前者底層是linux 後者底層是Windows,以下圖為例:
asp.net core docker demo程式的名稱都是“microsoft/dotnet-samples”,
使用pull命令時,linux container 自動獲取的是“版本 是 OS:Linux 4.9.125-linuxkit”
Windows container,自動獲取的是基於Windows servercore的 10.幾的版本號;
3. Windows container
先講 微軟釋出的Windowsserver core,以下從網上覆制到;
從 Windows Server 2008 開始,管理員可以選擇安裝具有特定功能但不包含任何不必要功能的 Windows Server 的最小安裝伺服器核心(Server Core),它為一些特定服務的正常執行提供了一個最小的環境,從而減少了其他服務和管理工具可能造成的攻擊和風險。伺服器核心並不支援所有的伺服器角色,它只提供了執行以下一個或多個伺服器角色的環境:Windows Server 虛擬化、動態主機配置協議 (DHCP) 伺服器、域名系統 (DNS) 服務、 檔案伺服器、Active Directory 目錄服務 (AD DS)、Active Directory 輕型目錄服務 (AD LDS)、 Windows 媒體服務、列印管理等
同時伺服器核心還支援以下特徵:群集伺服器,網路負載平衡,Unix子系統,Windows Server Backup,MPIO,Removable Storage Management,Windows BitLocker驅動器加密,SNMP,Single Instance Storage以及Telnet客戶端等特徵。
再講 Windows container,
Windows container就是基於 Windows server core 的 cocker環境;簡單講,可以支援所有Windows的非介面(gui)的後臺服務和程式,例如asp.net網頁,wcf,IIS服務,其他後臺服務程式 等等;
microsoft/windowsservercore image 是基礎,
4. Windows server 生產環境
如果是學習,在win10用 docker toolbox 或 Docker for Windows Desktop 都可以;
生產關鍵怎麼辦?
微軟從winserver2016開始支援原生的Windows container(繼續 win 10.幾版本號),docer 命令 與 windows powershell無縫整合;
本人在 winserver2019進行測試,操作Windows container 完全媲美 linux docker;,讓Windows從業人員體會到全程 powershell命令列的快感;
注意:只支援powershell命令列,(除了Kitematic)其他linux下docker的介面操作環境都不支援;
在Windows container 環境下,Kitematic跟沒有一樣;在Windows下使用 linux docker,Kitematic還湊活;
5. Windows server 下 Windows container 的排他性;
在Windows server(以2019為例),原生只支援 Windows container ;通過手工下載和配置 “docker-machine-Windows-x86_64.exe”,可以支援 linux container ;單同時只能支援1種;
就生產環境而言,在 Windows server 下 執行 linux container docker ,完全沒有意義;
網上看到docker官方新聞,同時docker images,可以列出本機的 Windows container 和 linux container ;字面意思是可以同時支援 Windows container 和 linux container ;網上沒有例子也沒有資料;
僅有1位前輩提到1709版的server 2016支援2個共存,沒有看到例項;
6. Windows docker 開發環境
在開發環境,因為mysql、oracle等,如果安裝和切換,實在不方便,可以使用linux container來部署;隨用遂啟動,完全不佔用本機的cpu記憶體資源;
7. windows docker 生產力環境:
國內僅看到攜程的.net docker介紹,因為攜程的.net 後臺很多,是.net的企業應用大戶,為了資源和效率,已經部署了好多.Windows container環境,僅此1家;
8. asp.net 不是 .net core,不是 .net core,不是 .net core;
驗證成功,延伸出來,webserver,wcf等後臺程式完全沒有問題;Windows server 也可以享受docker的福利;