真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在Linux和Windows的Docker容器中運(yùn)行ASP.NETCore

本篇內(nèi)容主要講解“怎么在Linux和Windows的Docker容器中運(yùn)行ASP.NET Core”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么在Linux和Windows的Docker容器中運(yùn)行ASP.NET Core”吧!

成都創(chuàng)新互聯(lián)長期為上1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為淮南企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)淮南網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

我安裝了如下東西:

  • Visual Studio Community 2015

    • Visual Studio 2015 Update 3

  • ASP.NET Core with .NET Core

    • .NET Core 1.0.1 - VS 2015 Tooling Preview 2

  • Docker for Windows(我使用Beta通道)

  • Visual Studio Tools for Docker

Docker for Windows真的非常好,它可以自動(dòng)為你配置好Hyper-V,創(chuàng)建一個(gè)Docker宿主OS,并啟動(dòng)好這個(gè)虛擬機(jī)。節(jié)約了大量的時(shí)間。

怎么在Linux和Windows的Docker容器中運(yùn)行ASP.NET Core

這是我的Linux宿主,我無需太多關(guān)心它的情況。我將會(huì)通過命令行或Visual Studio來完成所有事情。

首先通過File | New Project來創(chuàng)建一個(gè)運(yùn)行在.NET Core中的ASP.NET Core應(yīng)用程序。

接著在項(xiàng)目名稱上點(diǎn)擊右鍵并選擇Add | Docker Support。這一菜單來自Visual Studio Tools for Docker擴(kuò)展。這個(gè)步驟會(huì)添加基本的Dockerfile和其他docker-compose文件。通過這樣的開箱即用的步驟,我就完成了所有的配置從而能夠把ASP.NET Core應(yīng)用程序部署到Docker Linux容器中。

ASP.NET Core運(yùn)行在Docker Linux容器中

從我這個(gè)ASP.NET Core應(yīng)用當(dāng)中,我們可以看到其使用的基礎(chǔ)鏡像(就是Dockerfile中的FROM語句)是Linux的ASP.NET Core鏡像。

FROM microsoft/aspnetcore:1.0.1
ENTRYPOINT ["dotnet", "WebApplication4.dll"]
ARG source=.
WORKDIR /app
EXPOSE 80
COPY $source .

接下來,由于我不希望Docker編譯我的應(yīng)用程序,只想發(fā)布到本地。可以閱讀Steve Laske的博客文章"Building Optimized Docker Images with ASP.NET Core"來了解如何在一個(gè)容器中構(gòu)建應(yīng)用程序而在其他容器中運(yùn)行。這樣做優(yōu)化了服務(wù)器的使用率和資源。

我將通過如下命令行指令來發(fā)布、構(gòu)建鏡像并運(yùn)行它。

>dotnet publish

>docker build bin\Debug\netcoreapp1.0\publish -t aspnetcoreonlinux

>docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
aspnetcoreonlinux      latest              dab2bff7e4a6        28 seconds ago      276.2 MB
microsoft/aspnetcore   1.0.1               2e781d03cb22        44 hours ago        266.7 MB

>docker run -it -d -p 85:80 aspnetcoreonlinux
1cfcc8e8e7d4e6257995f8b64505ce25ae80e05fe1962d4312b2e2fe33420413

>docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
1cfcc8e8e7d4        aspnetcoreonlinux   "dotnet WebApplicatio"   2 seconds ago       Up 1 seconds        0.0.0.0:85->80/tcp   clever_archimedes

到此,我的ASP.NET Core應(yīng)用就可以運(yùn)行在Docker中了。我們現(xiàn)在已經(jīng)嘗試了一個(gè)Docker容器,它是托管在Windows中通過Hyper-V來運(yùn)行的Linux宿主中。

我們還可以做點(diǎn)別的什么呢?

ASP.NET Core運(yùn)行在一個(gè)運(yùn)行著Windows Nano Server的Docker Windows容器中

有這樣一種Windows Server,稱之為Windows Server Core,它刪除了UI相關(guān)的東西;有這樣一種Windows Server,稱之為Windows Nano Server,它讓W(xué)indows縮減到只有幾百M(fèi)而不是幾G。這意味著從所需功能和服務(wù)器使用率的角度看,這是一個(gè)非常好的選擇,讓你部署的空間占用盡可能的小。

讓我來看一下我是否能把ASP.NET Core通過Kestrel【譯者注:ASP.NET Core的跨平臺(tái)Web服務(wù)器實(shí)現(xiàn)】運(yùn)行到Windows Nano Server中。當(dāng)然,由于Nano功能強(qiáng)大,我也能在這個(gè)容器中運(yùn)行IIS,這里有文檔說明。

來自Docker公司的Michael Friis有一篇很棒的博客文章描述了在Windows Server容器中構(gòu)建和運(yùn)行Docker應(yīng)用。在安裝了最新版的Docker for Windows之后,你就可以通過上下文菜單來在Linux和Windows容器間切換。

怎么在Linux和Windows的Docker容器中運(yùn)行ASP.NET Core

那么現(xiàn)在我就來用用Windows容器的Docker。你可能還不知道你已經(jīng)擁有Windows容器了!它已經(jīng)和Windows 10周年更版本一起發(fā)布了。你可以在Windows特性對(duì)話框中啟用容器功能:

怎么在Linux和Windows的Docker容器中運(yùn)行ASP.NET Core

我將修改一下Dockerfile來使用Windows Nano Server鏡像。我也可以在Docker內(nèi)部通過環(huán)境變量和Expose命令來控制ASP.NET暴露的端口。

FROM microsoft/dotnet:nanoserver
ENTRYPOINT ["dotnet", "WebApplication4.dll"]
ARG source=.
WORKDIR /app
ENV ASPNETCORE_URLS http://+:82
EXPOSE 82
COPY $source .

接著,我發(fā)布并構(gòu)建……

>dotnet publish
>docker build bin\Debug\netcoreapp1.0\publish -t aspnetcoreonnano

然后,運(yùn)行它,映射Windows外部端口到Windows容器內(nèi)部!

注意:在Windows 10通過“NAT”(網(wǎng)絡(luò)地址轉(zhuǎn)換)來和容器通訊的時(shí)候,有一個(gè)Bug,你不能如你(我)所愿的那樣,直接通過 http://localhost:82 來訪問容器應(yīng)用。你不得不通過容器本身的IP來訪問。一旦聽到這個(gè)Bug的更多消息和被修復(fù)的情況,我會(huì)及時(shí)公布在這里。它應(yīng)該會(huì)通過Windows Update在幾天內(nèi)出現(xiàn)。從Docker得到容器的IP地址的方法為:docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" HASH

那么,我將通過如下命令在Windows Nano Server中運(yùn)行我的ASP.NET Core應(yīng)用(再次說明一下,它將運(yùn)行在Windows 10的Nano Server容器內(nèi))。

>docker run -it -d -p 88:82 aspnetcoreonnano
afafdbead8b04205841a81d974545f033dcc9ba7f761ff7e6cc0ec8f3ecce215

>docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" afa
172.16.240.197

現(xiàn)在,我可以通過172.16.240.197:82來訪問這個(gè)站點(diǎn)。一旦上面的Bug被修復(fù)后,我們就能像其他容器那樣訪問它了。

Windows容器的最美好的一面就是它非??旌洼p量級(jí)。一旦鏡像被下載下來,在機(jī)器上構(gòu)建好,那么你通過Docker來啟動(dòng)和停止它們都是秒完成。

不過,你也可以通過如下命令來使用Docker隔離Windows容器:

docker run --isolation=hyperv -it -d -p 86:82 aspnetcoreonnano

如此一來,實(shí)例完全是通過Hyper-v本身來隔離運(yùn)行的。你可以獲得世界上最好的東西:速度、方便的部署加上可選且便捷的隔離。

ASP.NET Core運(yùn)行在一個(gè)運(yùn)行著Windows Server Core的Docker Windows容器中

接下來,我把Dockerfile修改為使用完整的Windows Server Core鏡像。在下載安裝這個(gè)鏡像后,其占用大約8G的空間,需要花一點(diǎn)時(shí)間來下載和解壓,不過它確實(shí)是真正的Windows。你也可以選擇運(yùn)行為一個(gè)容器或者隔離的Hyper-V容器。

這里,我通過修改FROM語句來使用包含了.NET Core的Windows Sever Core:

FROM microsoft/dotnet:1.0.0-preview2-windowsservercore-sdk
ENTRYPOINT ["dotnet", "WebApplication4.dll"]
ARG source=.
WORKDIR /app
ENV ASPNETCORE_URLS http://+:82
EXPOSE 82
COPY $source .

注意:我聽說使用Windows Sever Core的.NET Core鏡像有可能會(huì)取消。因?yàn)樽?NET Core運(yùn)行在Windows Nano Server或其他輕量級(jí)鏡像中更有意義。你應(yīng)該把Sever Core用于那些更加笨重的應(yīng)用。如果你真的需要運(yùn)行在Sever Core的.NET Core,你可以制作自己的Dockerfile來輕易構(gòu)建你所要的鏡像。

接下來,我將再次發(fā)布、構(gòu)建和運(yùn)行。

>docker images
REPOSITORY             TAG                                    IMAGE ID            CREATED             SIZE
aspnetcoreonnano       latest                                 7e02d6800acf        24 minutes ago      1.113 GB
aspnetcoreonservercore latest                                 a11d9a9ba0c2        28 minutes ago      7.751 GB

由于容器能夠非??斓膯?dòng)和停止,所以我可以利用跑在容器中的redis、一個(gè)SQL容器和包含其他部分的第三個(gè)容器來跑一個(gè)完整的Web集群。或者混合并配對(duì)。

>docker ps
CONTAINER ID        IMAGE                 COMMAND                  PORTS                NAMES
d32a981ceabb        aspnetcoreonwindows   "dotnet WebApplicatio"   0.0.0.0:87->82/tcp   compassionate_blackwell
a179a48ca9f6        aspnetcoreonnano      "dotnet WebApplicatio"   0.0.0.0:86->82/tcp   determined_stallman
170a8afa1b8b        aspnetcoreonnano      "dotnet WebApplicatio"   0.0.0.0:89->82/tcp   agitated_northcutt
afafdbead8b0        aspnetcoreonnano      "dotnet WebApplicatio"   0.0.0.0:88->82/tcp   naughty_ramanujan
2cf45ea2f008        a7fa77b6f1d4          "dotnet WebApplicatio"   0.0.0.0:97->82/tcp   sleepy_hodgkin

總結(jié)

再次,讓我們閱讀Michae的另外一篇文章,他使用Docker Compose來把ASP.NET Music Store示例跑在一個(gè)Windows容器中,而SQL Express跑在另外一個(gè)中,以及Steve Lasker的博客文章(實(shí)際上他的整篇文章都是金礦)中提到的為ASP.NET Core制作一個(gè)優(yōu)化的Docker鏡像。

IMAGE ID            RESPOSITORY                   TAG                 SIZE
0ec4274c5571        web                          optimized           276.2 MB
f9f196304c95        web                          single              583.8 MB
f450043e0a44        microsoft/aspnetcore         1.0.1               266.7 MB
706045865622        microsoft/aspnetcore-build   1.0.1               896.6 MB

Steve提到了大量的技巧,讓你可以解決Docker和ASP.NET Core在一起的大部分問題。

所有的一切意味著(IMHO),你可以把ASP.NET Core用在:

  • 在Linux中跑ASP.NET Core

    • 在Docker容器里面

    • 在任何云平臺(tái)中

  • 在Windows,、Windows Server、Server Core和Nano Server中跑ASP.NET Core

    • 在Docker的Windows容器里面

    • 在Docker的Hyper-V隔離容器里面

這意味著你可以選擇任意特性支持和為服務(wù)器使用率和便捷度優(yōu)化過的尺寸大小。一旦所有的工具(Docker for Windows和Visual Studio Docker Tools)準(zhǔn)備妥當(dāng),我們就能擁有良好的調(diào)試環(huán)境,和從開發(fā)到生產(chǎn)的工作流支持。

到此,相信大家對(duì)“怎么在Linux和Windows的Docker容器中運(yùn)行ASP.NET Core”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


分享題目:怎么在Linux和Windows的Docker容器中運(yùn)行ASP.NETCore
當(dāng)前地址:http://weahome.cn/article/ieciji.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部