docker4dotnet #1 – 前世今生 & 世界你好


作為一名.NET Developer,這幾年看着docker的流行實在是有些眼饞。可惜的是,Docker是基於Linux環境的,眼瞧着那些 java, python, node.js, go 甚至連php程序員都可以docker了,自己還在苦哈哈的裝虛擬機,實在是急啊!所以對於.NET Core的發展格外關注,因為它的跨平台,意味着.NET Developer也可以docker了。

前世今生

d4d-1-001

.NET core 1.0並不是對原有的.net平台的升級,而是一次全新的重寫,這個開發過程微軟也史無前例的采用了全面開源的做法,在github上接受全球開發者的pull request。從上圖可以看出,.NET core與現有的.net framework是並行的,是完全獨立發展的一套開發平台。與之前的.net framework最大的區別在於跨平台,同時支持Windows/macOS/Linux 這三大操作系統。在GitHub上.NET Core的發布時間線可以看到在過去的2年里,微軟一步步的將.NET 從Windows操作系統上剝離,逐步添加了對macOS和Linux操作系統的支持,同時與開源社區的合作也在逐步加深。

– 2014年7月 - 微軟在github上發布了asp.net vNext(也就是asp.net 5)的前身,這時還是alpha階段
– 2014年11月 - 發布了beta1,並且開始使用asp.net 5的名稱
– 2015年10月 - 發布了beta8,這是最后的一個beta版本,這一年的時間里,微軟逐步提供了對於macOS和Linux操作系統的支持;同時隨着 Visual Studio Code 這個跨平台代碼編輯器的流行,大家慢慢開始關注asp.net 5
– 2015年11月 - 發布了RC1,標志着asp.net 5基本具備了使用在生產環境的能力
– 2016年6月27日 - 在RedHat全棧開發者大會DevNation上,微軟與RedHat攜手發布了Asp.net Core 1.0,標志着微軟這一跨平台開發工具的正式發布。

為什么是Docker?

我們再來看看docker,這個2013年才發布的開源項目從一開始就引起了全球開發者的極大關注,在發布4個月的時間里下載量就超過50000次, github上收到超過4000個star,涌現了超過100個貢獻者,並且有超過150個項目和超過1000個產品開始使用docker。1年之內,RedHat和AWS就宣布為Docker提供官方支持,在這樣大的關注下,連Docker自己的CEO都勸說全球的開發者暫時不要將Docker用於生產環境。2014年6月,Docker發布了1.0版本,這時Docker的下載量已經超過275萬,到今天這個數字已經超過了10億。

為什么小編對docker如此垂涎,此話要從“修電腦”說起。作為一名程序員,誰沒有修過電腦,誰沒有被叫去修過電腦,誰沒有被認為很會修電腦 … … 可是,你有想過為啥我們這樣擅長修電腦么?難道真的是因為泡妹子么?那都是副產品好么!!!

故事 … … 一個月前接了一個項目,用的是XXX技術,搭建好了環境,熱火朝天干了一個月;今天項目經理說這里還有另外項目的一些小問題需要處理,你來看看吧,用不了多少時間。結果你發現這個項目用的是YYY的技術,搭建環境就化了你半天時間,這時候項目經理電話來了:“為啥還沒搞完?啥,環境還沒搞好,算了,你別搞了,我找別人!“。好吧,苦逼的你回去繼續原來的項目,發現XXX環境的變量被YYY搞亂了,改了很久也搞不好 … … 結果就是:從!裝!電!腦!

程序員就這樣變成裝機高手!再后來的程序員開始使用虛擬機,把開發環境放到虛擬機中,這樣就不用擔心不同環境之間互相沖突,不過虛擬機動輒幾十個G的硬盤占用和巨大的CPU和內存開銷讓電腦變得慢吞吞的,本來i7的機器只能享受到i3的性能,太浪費了。

這就是為啥docker成為了全球程序員的福音:

– 不必擔心新接手的項目環境搭建復雜;
– 不必擔心同時開發2個環境互相沖突的項目;
– 不會再占用大量的內存和硬盤,環境啟動迅速,啟動一個容器只需要幾秒鍾,而虛擬機需要幾分鍾;就算是8G內存也可以同時跑多個容器,而虛擬機能跑2個就不錯了;
– 直接把做好的應用丟給測試,測試不必自己再從新搭建環境,要恢復干凈的測試環境也只是一個命令而已;
– 直接把測試好的應用丟給運維去部署,不用去和運維撕扯 jdk 1.8還是1.7
– 環境壞掉了,換個新的,不用費勁去看log,恢復這恢復那
– 不用擔心你旁邊的程序員用了不同版本的jdk,他的環境就是你的環境,哪怕你用的本本上是win7,他在用高大上的macbook pro

這不是程序員的天堂么? 這就是docker帶給我們的,這就是為啥程序員們急不可耐的開始使用docker,而且願意沖破阻力讓運維去接受docker,這種事情在歷史上好像沒有出現過;從來都是運維要求開發使用標准化環境的。

其實Docker所解決就是一直困擾每一名IT人的環境不統一問題;這個問題隨着各種技術,框架和平台的爆炸性增長最終成為應用開發效率的終極殺手,讓開發者和企業付出巨大的努力和金錢。無論是從組織和流程層面的ITSM,還是從敏捷化角度推行的DevOps,或是自動化(如:Chef/Puppet等)都沒有跳出這個問題所形成的漩渦。這些方法或者工具試圖用復雜的方法來適應復雜的環境,而Docker則是用一種逆向思維的方式來解決這個問題,用簡單的方法來解決復雜的問題,很有點四兩撥千斤的感覺!

為啥它的名字叫做Docker:因為Docker所使用的容器技術(Containers)就來自於運輸行業的集裝箱(Containers)的思路。運輸行業在60年代遭遇了同樣的問題,大家希望運送的物品各式各樣,尺寸不一,這給運送過程造成了極大的麻煩。這就如同我們需要將不同環境,不同版本的應用從開發運送到測試,再運送到生產。

d4d-1-002

於是集裝箱開始出現,運輸公司將不同尺寸的物品裝入統一的集裝箱,這樣無論是卡車,碼頭機械,飛機和輪船的貨倉都可以按照標准化的集裝箱尺寸進行設計,極大的提高了效率,降低了成本。Docker在這里就起到了這個集裝箱的作用,讓開發人員可以按照需要將環境和應用裝入容器,而測試和運維人員只需要運送和裝載。

d4d-1-003

Docker借用了集裝箱運輸的思路,將應用所需要的所有環境一同打包,同時采用輕量級的虛擬化技術在操作系統之上提供一個相對隔離的運行時空間。這樣,開發人員就可以直接完成依賴環境與應用本身的打包,而測試/運維人員只需要進行裝載操作。

d4d-1-004

開發環境選擇

要使用Docker來開發.NET Core應用程序,你可以選擇自己喜歡的操作系統和工具,在這個系列文章里面,我會介紹2個最常見的開發環境

– Windows + Visual Studio 2015 + Docker for Windows
– macOS + Visual Studio Code + Docker for Mac

部署環境上,我將使用微軟的Azure和亞馬遜的AWS來實現測試和生產環境的部署,並且借助Visual Studio Team Service 作為DevOps工具鏈來實現從開發-測試-生產的發布管道(Release Pipeline)的建立。

Docker 世界,你好!

今天我先來看看最簡單的場景,在Windows 10上面搭建Docker for Windows 開發環境,並使用Visual Studio 2015和Docker for Visual Studio插件來完成一個.net Core 應用的創建和調試。

你可以通過這段5分鍾的視頻了解以下運行效果,如果需要了解詳細步驟,請看下面的說明:

1. 在 Windows 上面安裝 Docker for Windows

Docker for Windows是Docker公司為使用Windows的開發人員提供的開發和測試環境,他的前身是Docker Toolbox。Docker for Windows和Docker Toolbox的區別在於前者使用Hyper-V提供虛擬化支持,Docker Toolbox使用VirtualBox。因此,如果你使用的是Windows 10操作系統,你可以使用Docker for Windows,如果使用的是更老的操作系統,則可以使用Docker Toolbox。

可以從以下地址下載這2個工具:
https://docs.docker.com/engine/installation/windows/

在這篇文章里面我使用的是 Docker for Windows 和 Windows 10的環境,Docker for Windows 對 Windows 10的版本也是有要求的,最低需要 Version 1511 (OS Build 10586)以上才可以,你可以在通過winver命令來查看自己的版本信息。

d4d-1-005

安裝過程非常簡單,直接雙擊下載好的安裝包,一直下一步就可以完成。在這個過程中,如果你的機器還沒有啟用Hyper-V,安裝程序會自動啟用。如果你的Windows 10本來就是一台虛擬機,那么根據你所使用的虛擬化工具的不同,可以啟動虛擬化嵌套,也就是在虛擬機里面運行虛擬機。

d4d-1-006

安裝好以后一定要記得要使用管理員權限啟動 Docker for Windows,否則 Docker for Windows 將無法與Hyper-V控制台通訊,造成環境啟動失敗。

d4d-1-007

Docker for Windows 啟動成功后會彈出系統通知,

d4d-1-008

同時在Hyper-V 控制台中可以看到一台LinuxVM正在運行。

d4d-1-009

以上過程可以看出,Docker for Windows的工作機制實際上是在 Hyper-V 中運行了一台運行了Docker Daemon (駐守程序)的虛擬機,並將Windows上運行的Docker命令行工具指向了這台虛擬機中的docker環境。而對於開發者而言,我們只需要在Windows上運行cmd或者powershell命令行,就可以使用同樣的docker 命令進行操作了。

d4d-1-010

2. 安裝 Docker for Visual Studio 插件

Visual Studio 強大的開發和調試能力對於提升效率有很大的幫助,為了能夠提供基於docker的開發調試體驗,微軟提供了一個 Docker Tools for Visual Studio  插件。

如果你還沒有安裝 Visual Studio 2015,可以在以下地址下載最新的社區版,這個版本完全免費,同時也支持加載插件。

https://www.visualstudio.com/products/visual-studio-community-vs

d4d-1-011

安裝好以后,打開 Tools | Extensions and Update 菜單,輸入 docker 進行搜索,就可以找到這個插件:

d4d-1-012

插件下載地址:

https://visualstudiogallery.msdn.microsoft.com/0f5b2caa-ea00-41c8-b8a2-058c7da0b3e4

3. 准備 .NET Core 環境

首先,進入 .NET Core 的 Windows 環境主頁  ,按照要求下載和安裝 .NET Core 1.0 for Visual Studio,下載地址如下

https://go.microsoft.com/fwlink/?LinkId=817245

d4d-1-013

安裝后就可以在Visual Studio 中創建.NET Core 應用了。

4. 在 Visual Studio 2015 中創建.NET Core Web App

點擊 File | New | Project …,打開項目創建引導,並選擇 ASP.NET Core Web Application (.NET Core) 項目類型

d4d-1-014

在模板頁中選擇 Web Application 模版,並點擊OK,進行創建

d4d-1-015

創建完成后 Visual Studio 會自動運行dotnet restore命令恢復項目依賴,等待這一過程完成,然后按F5測試一下,正常情況下你可以看到以下初始的網站狀態。

d4d-1-016

5. 啟用 Docker Support,並使用Docker環境進行調試

在項目節點上右鍵單擊,並選擇 Add | Docker Support

d4d-1-017

這時,你項目里面會多出以下2部分內容

d4d-1-018

(1)這里是對Visual Studio 進行配置,確保 Visual Studio 的工具鏈會正確與 docker 環境集成
(2)這里是對Docker自己的環境配置,包括 Dockerfile 和 Docker Compose file (這部分的具體內容在后續的文章中給大家介紹),另外還有一個 DockerTask.ps1。

DockerTask.ps1 是一個 powershell 腳本,Visual Studio 和 Docker 的交互其實都是通過這個腳本來完成的,這里貼出這個腳本的參數部分,你會看到腳本中對常用的docker命令又進行了一層封裝,讓docker可以更好的配合Visual Studio的工具鏈調用。這個腳本非常有用,特別是在沒有 Visual Studio 的情況下,你完全可以借助這個腳本手動完成工具鏈的構建。

d4d-1-019

現在,你會發現在 Visual Studio的運行狀態欄中多了一個 Docker 的選項,意味着我們可以直接點擊這個按鈕或者F5,就可以將應用部署到本地的 Docker for Windows 環境,並開始調試了。

d4d-1-020

運行起來的效果如下

d4d-1-021

你可以看到我在Controller里面添加了一行代碼來獲取本地的機器名,在容器里面獲取到的就是這個容器的id,同時在這里還可以設置斷點;在docker中運行的應用會中斷,你可以像調試一個普通的ASP.NET應用一樣來調試這個運行在Docker中的應用。


本文僅僅是 Docker for .NET Developer (D4D) 系列的開始,大家可以看到借助Visual Studio一貫強大的開發和調試能力和Docker的環境隔離能力,可以大大提高開發效率。后續還將為大家介紹如何在macOS上使用Docker進行開發,同時借助 VSTS 的 DevOps 工具鏈支持完成雲端的Docker環境集成。

本文中所使用的工具有些需要翻牆才能才能正常下載,小編將她們整理了一下放在雲盤上,供大家高速下載;需要的朋友請公眾號關注公眾號 devopshub ,並在消息中輸入 d4dtools 獲取下載地址,謝謝!


請關注微信公眾號 【devopshub】,獲取更多關於DevOps研發運維一體化的信息

qrcode_for_gh_b7c158df1fd1_430


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM