在Azure中運(yùn)行Linux容器ASP.NET5跨平臺(tái)應(yīng)用程序-創(chuàng)新互聯(lián)

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

專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)包河免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

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

  • Git for windows 或者 GitHub desktop

  • Azure CLI 或者 Azure Powershell

  • Docker toolbox 1.8.x

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

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

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

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

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

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

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

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

接下來(lái),我們將分別介紹兩種方式:

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

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

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

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

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

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

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

FROM microsoft/aspnet

COPY project.json /app/

WORKDIR /app

RUN ["dnu", "restore"]

COPY . /app

EXPOSE 5004

ENTRYPOINT ["dnx","kestrel"]

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

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

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

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

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

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

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

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

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

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

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

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

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

實(shí)際測(cè)試設(shè)置:

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

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

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

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

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

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

實(shí)際測(cè)試設(shè)置:

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

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

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

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

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

在Virtual Studio 項(xiàng)目中打開project.json, 修改下圖部分:

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

注意,通過(guò)擴(kuò)展工具發(fā)布項(xiàng)目到Azure時(shí),容器端口要和配置端口匹配;

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

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

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

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

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

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

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

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

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章名稱:在Azure中運(yùn)行Linux容器ASP.NET5跨平臺(tái)應(yīng)用程序-創(chuàng)新互聯(lián)
文章出自:http://bm7419.com/article24/dihcje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、小程序開發(fā)、App設(shè)計(jì)、搜索引擎優(yōu)化、面包屑導(dǎo)航、網(wǎng)站營(yíng)銷

廣告

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

網(wǎng)站優(yōu)化排名