windows container (docker) 容器技術研究,資料彙總,心得筆記
背景
業務需求:簡化公司私有雲,公有雲的部署,嘗試尋找更好的,更優化的技術方案替換現有的虛拟機部署方案。
技術背景: .net
Docker 學習資料
Docker中文社群: http://www.docker.org.cn
微軟docker文章:http://ruby-china.org/topics/27156
微軟docker官方文檔: https://docs.microsoft.com/zh-cn/virtualization/windowscontainers/manage-docker/configure-docker-daemon
Windows container部署還要學習下powershell (百度下學習資料)
Windows container Docker 案例
攜程.net 容器案例: https://segmentfault.com/a/1190000008169749
(.net 案例真的很少很少)
攜程案例:http://geek.csdn.net/news/detail/64295
Docker 應用案例: http://www.docker.org.cn/docker/122.html
除了以上的案例外,自然還有非常多案例,但是基本都是java的!
Docker 常用指令
參考資料:http://blog.csdn.net/zhang__jiayu/article/details/42611469
(可百度搜尋更多)
容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作運維 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
容器rootfs指令 — docker [commit|cp|diff]
鏡像倉庫 — docker [login|pull|push|search]
本地鏡像管理 — docker [images|rmi|tag|build|history|save|import]
其他指令 — docker [info|version]
Windows container (Docker) 安裝
參考文章: http://www.bubuko.com/infodetail-1765950.html
微軟文章: https://docs.microsoft.com/zh-cn/virtualization/windowscontainers/manage-docker/configure-docker-daemon
1、安裝Container Feature,容器功能角色
可以使用UI,當然也可以用PowerShell:
Install-WindowsFeature containers
Restart-Computer -Force
由于容器本身可以跑在實體機或者虛拟機中,可以順便把Hyper-V也裝了。
2、安裝Docker
可以很炫的用PowerShell來拉取Docker引擎:
Invoke-WebRequest "https://get.docker.com/builds/Windows/x86_64/docker-1.12.1.zip" -OutFile "$env:TEMP\docker-1.12.1.zip" –UseBasicParsing
預設解壓到C:\Program Files\Docker
Expand-Archive -Path "$env:TEMP\docker-1.12.1.zip" -DestinationPath $env:ProgramFiles
當然,你手動用浏覽器什麼的https://get.docker.com/builds/Windows/x86_64/docker-1.12.1.zip 下載下傳了自己解壓也是沒問題的。
然後要配置路徑的環境變量:
如果是臨時測試,可以用:
$env:path += ";c:\program files\docker"
馬上就可以繼續後續的PowerShell指令。
如果以後還要用,那就:
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Program Files\Docker", [EnvironmentVariableTarget]::Machine)
重新打開PowerShell。
當然,也可以用傳統的CMD Set Path=。。。。來配置。
接下來就要注冊Docker Deamon服務了,然後啟動docker服務。
dockerd --register-service
Start-Service docker
Windows container Docker 鏡像安裝
.net(或者說windows) 下面可選擇的基礎鏡像容器作業系統: windows server core 和 nanoserver
Linux等其他平台的鏡像比較多
參考: https://hub.docker.com/explore/
而Windows 鏡像其實不多
參考:https://hub.docker.com/r/microsoft/
阿裡雲的鏡像服務(國内下載下傳快一些):https://dev.aliyun.com/
來源網上的文章描述:
很多朋友都問過這個問題:我是不是可以在Windows容器服務中運作Linux應用,或者反過來。Docker很厲害,但還木有辣麼厲害。你無法在Windows上直接運作Linux程序,同樣你也無法在Windows Container中運作Linux程序。這個情況對于以上提到的2中運作時都适用,無論哪種運作時模型,底層作業系統都是Windows,是以你無法運作Linux程序。
這同樣意味着,目前Docker Hub上面的大量鏡像無法在Windows Container 中使用。微軟已經開始在Docker Hub上提供Windows容器鏡像,你可以使用同樣的docker pull指令或者去這些鏡像。比如:microsoft/windowservercore 鏡像是一個完整的伺服器鏡像(大概3G大小),在這個鏡像中你可以使用标準的msi安裝包,通過Dockerfile來建構你自己鏡像,可以安裝和運作完整的.net framework和其他的Windows應用程式。microsoft/nanoserver 鏡像則是一個精簡版的作業系統鏡像(大概300M),不提供msi支援,隻能運作.net core應用,同時需要使用powershell進行管理。
Windows container Docker 鏡像制作
Windows 鏡像其實不多,這些可以用來做基礎的鏡像
阿裡雲的鏡像服務:https://dev.aliyun.com/
Dockfile 鏡像制作(建議百度擷取更多)
http://www.jb51.net/article/105333.htm
https://docs.microsoft.com/zh-cn/virtualization/windowscontainers/manage-docker/manage-windows-dockerfile
微軟制作的一些鏡像的腳本
https://github.com/Microsoft/Virtualization-Documentation
網上參考的鏡像制作的文章
Node.js鏡像 http://chuansong.me/n/509677751556
DoNet Core 鏡像 http://www.cnblogs.com/ylsforever/p/5736227.html
Docker 私有倉庫建設
微軟的倉庫或者阿裡雲的倉庫下載下傳docker速度依然是慢,慢,慢。必須要自建倉庫!
貌似網上沒有windows 的docker搭建私有倉庫的例子!貌似有ubuntu, 具體百度吧!
Docker 編排
參考文章:http://www.alauda.cn/2015/09/14/containers-docker-windows-and-trends/
容器編排比較: http://www.infoq.com/cn/news/2017/02/compare-container-orchestration
容器編排比較2:http://www.d1net.com/cloud/news/382913.html
攜程的案例:Mesos和Kubernetes (似乎涉及代碼的改造)
Swarm據說支援windows docker。
微軟官方貌似沒有 windows container 容器編排的工具支援。
總結
總體windows container的技術發展尚處于前期,很多的資料和工具尚且沒有配套的解決方案(整體部署颠覆原有windows的部署方式,需要采用powershell工具),沒有成熟的企業商用案例分享,甚至windows server core和nanoserver 的基礎鏡像都要下載下傳個大半天(鏡像生态似乎隻有微軟的貢獻,沒有第三方送出),甚至經常斷線(國内也沒有私有鏡像服務)。
Nanoserver 基礎鏡像 比較适合.net core的方式部署。(大約200-300M)
Windowservercore 基礎鏡像 比較适合 windows 舊的應用程式。(大約2-4G)
相反linux docker容器發展相對成熟很多,具體應用案例證明這些(百度下一些大公司的分享),上手更加容易(本身linux 常用shell腳本部署的),圍繞linux的容器生态(編排工具,解決方案等),更貼合作為linux開發運維的部署的簡化和完善補充。
雖然windows container 目前還不成熟,但是相信windows container的會繼續發展,我們依舊要持續保持關注,以便未來能夠真正落地,應用到公司的項目中簡化運維部署。
另外: 目前本人windows 上面也沒有成功運作過docker,因為微軟鏡像下載下傳真的很慢很慢,而且很不穩定。(也許是公司網絡原因)
歡迎有windows docker 經驗的人員留言交流,tks!!!
開源是一種态度,分享是一種精神,學習仍需堅持,進步仍需努力,.net生态圈因你我更加美好。