在Azure中運行Linux容器ASP.NET5跨平臺應(yīng)用程序

在之前一篇的博客中,介紹了如何通過Virtual Studio 2015的Docker擴展工具直接發(fā)布ASP.NET應(yīng)用程序到Azure公有云中的Windows Server 2016 TP3的Windows容器中,這個并不難理解,畢竟Windows 服務(wù)器內(nèi)核就是Windows運行.NET應(yīng)用程序是必須的;不過這里的伏筆是ASP.NET 5(vNEXT)的開源項目中具備通過DNX(.NET Execution Environment運行環(huán)境)將Bootstrap .NET應(yīng)用程序的編譯系統(tǒng),SDK工具以及CLR跨平臺的能力,所以我們也可以把ASP.NET 5的WEB應(yīng)用程序或控制臺程序發(fā)布到Linux或MAC OS的包含DNX環(huán)境的主機或Docker容器上;借助了容器技術(shù)的幫助,我們的應(yīng)用程序托管過程就真的不但可以跨平臺而且可以跨越云環(huán)境了,這個不是想著就開心的事情?呵呵:)目前DockerHub上已經(jīng)發(fā)布了ASP.NET預(yù)覽版的Docker容器映像。

專業(yè)從事網(wǎng)站建設(shè)、成都網(wǎng)站制作,高端網(wǎng)站制作設(shè)計,微信平臺小程序開發(fā),網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團(tuán)隊竭力真誠服務(wù),采用H5場景定制+CSS3前端渲染技術(shù),成都響應(yīng)式網(wǎng)站建設(shè)公司,讓網(wǎng)站在手機、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項小組,與您實時在線互動,隨時提供解決方案,暢聊想法和感受。

接下來將分別介紹如何兩種方式發(fā)布自己的ASP.NET  5預(yù)覽版應(yīng)用程序到托管到Azure公有云上運行的Linux虛擬機容器中,使用的客戶機就是我的測試機Windows  10客戶端環(huán)境,第一種方式需要確保在測試機安裝以下組件:

  • Git for windows 或者 GitHub desktop

  • Azure CLI或者 Azure Powershell

  • Docker toolbox 1.8.x

第一種方式我們需要通過以上工具獲得我們的測試使用的ASP.NET項目,連接和構(gòu)建我們發(fā)布在Azure端的Docker虛擬機并構(gòu)建和運行我們的項目容器。

第二種方式請參考我之前的博客在測試機上有安裝Virtual Studio 2015開發(fā)IDE及Virtual Studio 2015的Docker擴展工具就可以直接在Azure上構(gòu)建Docker的Linux虛擬機并將項目發(fā)布到Azure中了,這種方式就不再需要上述組件就可以獨立構(gòu)建和部署。

請注意:目前Docker的擴展在國內(nèi)版的Azure還沒有支持,因此本文介紹的內(nèi)容均為國際版Azure中具有的功能,要實現(xiàn)和測試該功能需要國際版Azure云環(huán)境的訂閱,并且ASP.NET 5 的Docker映像目前也處于預(yù)覽階段,即便是我的測試過程中也是遇到并解決了一些問題,因此如果你關(guān)注這個技術(shù)和項目的話,請持續(xù)關(guān)注Docker Hub中的變更以及Git 庫中項目更新文檔說明。

第一步,預(yù)先準(zhǔn)備Azure上創(chuàng)建Docker的Linux虛擬機

需要打包我們的應(yīng)用程序到ASPNET映像并運行的容器,我們首先需要在Azure上構(gòu)建托管的Docker Linux虛擬機環(huán)境,因為過程較為簡單如果不清楚怎么操作可以參考這篇文檔,直接通過Azure門戶市場創(chuàng)建。如果你參考過我之前的博客,那么可以也可以通過Virtual Studio Docker 擴展,在創(chuàng)建步驟中選擇Linux的環(huán)境虛擬機映像即可,見下圖:

在Azure中運行Linux容器ASP.NET 5 跨平臺應(yīng)用程序

本文中的測試環(huán)境使用的是Ubuntu Server 15.04版本。

接下來不論采用哪種方式部署ASP.NET 5應(yīng)用,我們都是在Azure上我們已經(jīng)構(gòu)建好了Linux Docker虛擬機環(huán)境用于我們應(yīng)用程序的部署。

接下來,我們將分別介紹兩種方式:

方式1,創(chuàng)建包含ASP.NET應(yīng)用程序的映像用于容器創(chuàng)建;Docker的一大魅力在于通過AUFS文件系統(tǒng)擴展了一層輕量級擴展的映像層,通過該層我們可以基于一個原始的映像一層一層的構(gòu)建我們標(biāo)準(zhǔn)化的應(yīng)用運行環(huán)境封裝,我們在這里需要的基礎(chǔ)映像是microsoft/aspnet開源項目映像;因此我們只要在之前部署在Azure Docker虛擬機環(huán)境中部署該鏡像,之后我們添加應(yīng)用程序打包創(chuàng)建的新的映像就只是基于代碼的Checkin而已,不但輕量而且部署過程非??焖?。這也是Docker在開源環(huán)境中如此受歡迎的原因之一。

部署基礎(chǔ)映像并添加我們的代碼過程只要通過Docker提供的聲明式的Dockerfile進(jìn)行構(gòu)建即可,關(guān)于Dockerfile的詳細(xì)使用語法等可以參考Docker官方文檔,這里就不贅述了。

本方式測試我們就直接引用aspnet/home中的Web應(yīng)用程序樣例代碼,因此我們先把項目克隆到本地Git庫,

git clone git@github.com:aspnet/Home.git aspnet-Home

進(jìn)入項目環(huán)境,可以看到項目中的文件如下:

在Azure中運行Linux容器ASP.NET 5 跨平臺應(yīng)用程序

我們打開并編輯目錄中的Dockerfile,修改為如下內(nèi)容:

FROM microsoft/aspnet

COPY project.json /app/

WORKDIR /app

RUN ["dnu", "restore"]

COPY . /app

EXPOSE 5004

ENTRYPOINT ["dnx","kestrel"]

(我測試時使用了酷酷的免費IDE, 可是支持Dockerfile語法智能感知的Virtual Studio Code,感興趣你也可以嘗試一下??!見下圖)

在Azure中運行Linux容器ASP.NET 5 跨平臺應(yīng)用程序

這里把Dockerfile都干了哪些事情構(gòu)建了添加了測試代碼的映像過程大致說明一下,首先FROM幫助我們從DockerHub中找到并下載aspnet:latest最新的基礎(chǔ)映像到部署在Azure端的Docker虛擬機環(huán)境。

接下來,COPY幫助我們把本地項目定義的Json文件拷貝到 掛接基礎(chǔ)映像/app目錄中用于dnu部署應(yīng)用;接下來WORKDIR將當(dāng)前工作路徑設(shè)置為 /app,COPY . /app幫助我們把當(dāng)前克隆的Git樣例代碼上傳到基礎(chǔ)映像的 /app目錄,最后設(shè)置WEB對外服務(wù)偵聽端口為5004,我們可以通過下圖中顯示的Project.json中的定義看到kestrel啟動的ASPNet服務(wù)端口,并且容器啟動時的入口是"dnx kestrel"啟動kestrel環(huán)境并在啟動時應(yīng)用project.json中的定義。

在Azure中運行Linux容器ASP.NET 5 跨平臺應(yīng)用程序

好了,現(xiàn)在我們有了可以構(gòu)建包含代碼的應(yīng)用基礎(chǔ)映像環(huán)境了,包括Dockerfile,project.json以及我們的應(yīng)用程序項目。下面我們開始連接Azure Docker虛擬機并通過TLS加密的Restful WEB訪問Docker Deamon獲得Dockerfile構(gòu)建整個Docker映像:

docker --tlsverify -H tcp://{Your Azure Docker VM DNS Name}:2376 build -t myapp .

以下是我測試時設(shè)置:

docker --tlsverify -H tcp://vnextserver.westus.cloudapp.azure.com:2376 build -t myapp .

完成之后,可以查看到映像的aspnet:latest基礎(chǔ)映像以及擴展了測試應(yīng)用的myapp映像已經(jīng)創(chuàng)建完畢。

在Azure中運行Linux容器ASP.NET 5 跨平臺應(yīng)用程序

接下來我們只要通過將此映像創(chuàng)建容器運行進(jìn)程就可以了,

docker --tlsverify -H tcp:// {Your Azure Docker VM DNS Name}:2376 run -t -d -p 80:5004 myapp

實際測試設(shè)置:

docker --tlsverify -H tcp://vnextserver.westus.cloudapp.azure.com:2376 run -t -d -p 80:5004 myapp

關(guān)于Docker run使用的參數(shù)和方法可以參考官方文檔,這里就簡要說明一下,-t為容器掛接了一個pseudo-tty, 據(jù)稱該參數(shù)未來ASPNET容器創(chuàng)建將不再需要。

-d代表將在后臺啟動改容器進(jìn)程,-p指定了該容器端口對外通過Azure Docker虛擬機暴露出來的端口,這里設(shè)置為80的映射,注意這里特別說明一下,容器的網(wǎng)絡(luò)環(huán)境在云中感覺想盜夢空間或者蟲洞穿越一樣,燒不燒腦可能看我們的狀態(tài)和智商,開個玩笑,見下圖,網(wǎng)絡(luò)層次映射出來有這樣幾個層次,上述命令完成了將容器服務(wù)端口映射到了虛擬機的外部端口80,但是如果訪問的Azure上的外網(wǎng)服務(wù)的話還需要將外網(wǎng)端口通過負(fù)載均衡或者端點Endpoint映射到虛擬機上,此外還有可能通過Azure NSG控制的網(wǎng)絡(luò)訪問控制策略等,相關(guān)知識點可以通過Azure的網(wǎng)絡(luò)部分介紹,這里就不展開介紹了,以后多做些博客慢慢介紹。  

在Azure中運行Linux容器ASP.NET 5 跨平臺應(yīng)用程序

檢查一下我們的創(chuàng)建的容器是否已經(jīng)運行起來了,

docker--tlsverify -H tcp:// {Your Azure Docker VM DNS Name}:2376 ps

實際測試設(shè)置:

docker--tlsverify -H tcp://vnextserver.westus.cloudapp.azure.com:2376 ps

訪問Azure 虛擬機外網(wǎng)的80端口,現(xiàn)在我們的ASPNET的測試應(yīng)用程序已經(jīng)運行在了Azure公有云的Linux虛擬機容器環(huán)境了,怎么樣,跨越云跨越平臺任務(wù)完成了 :)

在Azure中運行Linux容器ASP.NET 5 跨平臺應(yīng)用程序

接下來,給大家也介紹一下第二種方法,這種方式就是可以直接通過Virtual Studio發(fā)布ASP.NET到Azure的Docker虛擬機中,由于集成了對Docker CLI的支持,如果你不是Docker的深度用戶,可以更加關(guān)注你的代碼本身,讓IDE工具幫助你完成發(fā)布和部署工作,怎么樣?酷吧!

這里只給大家介紹一下發(fā)布的方法,其中首先確保我們已經(jīng)按照預(yù)準(zhǔn)備階段的需求準(zhǔn)備好了Azure上的Docker虛擬機(當(dāng)然我們就用我們的IDE創(chuàng)建最好了),然后我們?nèi)匀贿x擇我在之前博客中使用的ASP NET WEB項目,我們做一點點修改部署就可以了,我的測試發(fā)現(xiàn)當(dāng)前版本的工具生成的project.json文件有個小Bug,因此我們需要進(jìn)行簡單的修改,這個問題應(yīng)該在后面發(fā)布的Docker Virtual Studio 2015 擴展工具中得到解決。

在Virtual Studio 項目中打開project.json, 修改下圖部分:

在Azure中運行Linux容器ASP.NET 5 跨平臺應(yīng)用程序

注意,通過擴展工具發(fā)布項目到Azure時,容器端口要和配置端口匹配;

在Azure中運行Linux容器ASP.NET 5 跨平臺應(yīng)用程序

為了確定我們發(fā)布的項目有所更新,我們簡單的修改一個頁面about.cshtml通過Razor擴展html的C#標(biāo)記代碼如下,顯示我們的當(dāng)前應(yīng)用運行的容器:

在Azure中運行Linux容器ASP.NET 5 跨平臺應(yīng)用程序

然后發(fā)布我們的應(yīng)用,發(fā)布后訪問Azure Docker虛擬機外網(wǎng)進(jìn)行驗證,打開about頁面可以看到當(dāng)前運行的容器名稱:

在Azure中運行Linux容器ASP.NET 5 跨平臺應(yīng)用程序

我們檢查一下當(dāng)前運行的容器,Bingo,就是這個了,我們發(fā)布的更新已經(jīng)生效。

在Azure中運行Linux容器ASP.NET 5 跨平臺應(yīng)用程序

寫在最后,這篇博客給大家介紹了通過兩種方式在Azure公有云中部署跨平臺運行的運行在Linux容器中的ASP .NET 5應(yīng)用程序,個人感覺通過Virtual Studio 2015的確是個開發(fā)+部署的利器,不過如果你是Docker的深度用戶,采用第一種方式也無不可。需要注意的是,ASP .NET的基礎(chǔ)映像和項目在以及Virtual Studio 2015 Docker擴展工具都在持續(xù)更新中,所以你的測試或驗證過程可能略有出入,建議你感興趣的話持續(xù)關(guān)注這些項目的進(jìn)展。

當(dāng)前題目:在Azure中運行Linux容器ASP.NET5跨平臺應(yīng)用程序
轉(zhuǎn)載來于:http://bm7419.com/article6/jdecig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)站導(dǎo)航微信小程序、網(wǎng)站策劃App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司