中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在Azure中運行Linux容器ASP.NET 5 跨平臺應用程序

發布時間:2020-06-13 14:49:20 來源:網絡 閱讀:6871 作者:翟老貓 欄目:編程語言

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


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

  • Git for windows 或者 GitHub desktop

  • Azure CLI 或者 Azure Powershell

  • Docker toolbox 1.8.x

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

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

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


第一步,預先準備Azure上創建Docker的Linux虛擬機

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

在Azure中運行Linux容器ASP.NET 5 跨平臺應用程序

本文中的測試環境使用的是Ubuntu Server 15.04版本。

接下來不論采用哪種方式部署ASP.NET 5應用,我們都是在Azure上我們已經構建好了Linux Docker虛擬機環境用于我們應用程序的部署。

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

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

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

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

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

進入項目環境,可以看到項目中的文件如下:

在Azure中運行Linux容器ASP.NET 5 跨平臺應用程序

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

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 跨平臺應用程序

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

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

在Azure中運行Linux容器ASP.NET 5 跨平臺應用程序

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

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

以下是我測試時設置:

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

完成之后,可以查看到映像的aspnet:latest基礎映像以及擴展了測試應用的myapp映像已經創建完畢。

在Azure中運行Linux容器ASP.NET 5 跨平臺應用程序

接下來我們只要通過將此映像創建容器運行進程就可以了,

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

實際測試設置:

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

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

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

在Azure中運行Linux容器ASP.NET 5 跨平臺應用程序


檢查一下我們的創建的容器是否已經運行起來了,

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

實際測試設置:

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

訪問Azure 虛擬機外網的80端口,現在我們的ASPNET的測試應用程序已經運行在了Azure公有云的Linux虛擬機容器環境了,怎么樣,跨越云跨越平臺任務完成了 :)

在Azure中運行Linux容器ASP.NET 5 跨平臺應用程序

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

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

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

在Azure中運行Linux容器ASP.NET 5 跨平臺應用程序

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

在Azure中運行Linux容器ASP.NET 5 跨平臺應用程序


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

在Azure中運行Linux容器ASP.NET 5 跨平臺應用程序

然后發布我們的應用,發布后訪問Azure Docker虛擬機外網進行驗證,打開about頁面可以看到當前運行的容器名稱:

在Azure中運行Linux容器ASP.NET 5 跨平臺應用程序

我們檢查一下當前運行的容器,Bingo,就是這個了,我們發布的更新已經生效。

在Azure中運行Linux容器ASP.NET 5 跨平臺應用程序

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



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙海市| 东丽区| 呼图壁县| 七台河市| 孝昌县| 东乡县| 元氏县| 康马县| 富顺县| 太康县| 隆化县| 积石山| 山阳县| 元朗区| 贞丰县| 宾阳县| 运城市| 六枝特区| 仪征市| 浙江省| 琼海市| 温州市| 武汉市| 峨边| 工布江达县| 佛学| 五大连池市| 称多县| 任丘市| 云林县| 剑河县| 龙口市| 花莲市| 西平县| 泗阳县| 韩城市| 开封县| 承德市| 正阳县| 武清区| 洞头县|