在Docker容器中運(yùn)行ASP.NET MVC應(yīng)用程序

在Docker容器中運(yùn)行現(xiàn)有的.Net Framework應(yīng)用程序不需要對(duì)應(yīng)用程序進(jìn)行任何修改,我們需要?jiǎng)?chuàng)建包含應(yīng)用程序的Docker鏡像靠闭,然后啟動(dòng)容器即可。本篇主要講解如何在Docker容器中運(yùn)行ASP.NET MVC應(yīng)用程序忠烛。

生成Asp.Net MVC 應(yīng)用程序

打開VS創(chuàng)建一個(gè)ASP.NET Web Application(.NET Framework)概耻,如圖Image-1所示:

Image-1

打開Index.cshtml芥喇,修改里面的內(nèi)容如圖Image-2所示:

Image-2

直接運(yùn)行application西采,如圖Image-3所示:

Image-3

發(fā)布應(yīng)用程序(大家可以理解成為應(yīng)用程序打包)

在vs中右鍵單擊web項(xiàng)目,然后在彈出的menu中選擇Publish继控,彈出如圖Image-4所示的對(duì)話框:

Image-4

選擇Custom械馆,彈出如圖Image-5所示對(duì)話框,填寫custom的profile name:

Image-5

點(diǎn)擊OK button武通,彈出如圖Image-6所示對(duì)話框,Publish method選擇File System霹崎,Target location選擇你想要publish的地址:

Image-6

點(diǎn)擊Next button,彈出如圖Image-7所示的對(duì)話框冶忱,勾選Precompile during publishing尾菇,官方給的解釋是:This optimization means that you'll be compiling views in the Docker container, you are copying the precompiled view.:

Image-7

點(diǎn)擊Next Button然后點(diǎn)擊Publish,在VS的控制臺(tái)中我們會(huì)看到如圖Image-8所示的內(nèi)容,表示publish成功:

Image-8

可以通過訪問我們之前指定的publish location來看publish的包結(jié)果囚枪,如圖Image-9所示:

Image-9

添加Dockerfile文件

對(duì)dockerfile陌生的小伙伴可以查看(在Docker容器中運(yùn)行.Net Framework控制臺(tái)應(yīng)用程序)文章中對(duì)Dockfile的解釋错沽。

在Dockerfile文件中我們添加如下兩行命令:

FROM microsoft/aspnet

通過FROM指令來指定我們所要使用的基本鏡像

COPY /PublishOutput/ /inetpub/wwwroot

通過COPY來將我們publish的包c(diǎn)opy到container中

此Dockerfile不需要包含ENTRYPOINT指令。使用IIS運(yùn)行服務(wù)時(shí)眶拉,IIS進(jìn)程是入口點(diǎn),配置為aspnet基本鏡像中啟動(dòng)憔儿。

創(chuàng)建鏡像(Image)

打開cmd命令行工具忆植,進(jìn)入到Dockerfile所在的文件夾,鍵入如下命令:

docker build -t hellodockerweb:v1 .? ?如下圖Image-10所示:

Image-10

docker通過build指令來創(chuàng)建鏡像(Image), build 指令后的-t 表示的是指定當(dāng)前Image的Tag谒臼,大家可以理解成Image的Name朝刊,鏡像名稱冒號(hào)后面的v1大家可以理解成當(dāng)前Image的版本號(hào),如果不指定的話默認(rèn)會(huì)為latest蜈缤,最后的. 表示的是Dockerfile所在的當(dāng)前目錄拾氓。上面的指令可以理解成基于Dockerfile創(chuàng)建一個(gè)v1版本的名為hellodockerweb的鏡像。執(zhí)行該命令會(huì)得到如下圖Image-11所示的結(jié)果:

Image-11

截圖中顯示了Dockerfile中我們所寫的兩個(gè)指令的執(zhí)行情況底哥,最后會(huì)提示你Image創(chuàng)建成功咙鞍。如果大家是第一次執(zhí)行FROM microsoft/aspnet指令房官,docker daemon會(huì)去docker registry中拉取該基鏡像,這個(gè)過程相當(dāng)于下載該鏡像到本地续滋,執(zhí)行起來會(huì)慢一些翰守,大家不要著急。

我們通過docker images指令來查看創(chuàng)建的鏡像,如下圖Image-12所示:

Image-12

運(yùn)行容器

通過運(yùn)行指令docker run -d -p 9000:80 --name hellodockerwebcontainer hellodockerweb:v1 來運(yùn)行容器疲酌,結(jié)果如圖Image-13所示蜡峰,返回的是當(dāng)前Container的ID,我們可以在地址C:\ProgramData\Docker\windowsfilter\? 中找到該容器:

Image-13

該指令表達(dá)的意思是基于hellodockerweb:v1鏡像在detached模式下運(yùn)行一個(gè)名為hellodockerwebcontainer的容器朗恳,并且將宿主機(jī)器的9000端口與容器的80端口進(jìn)行映射

指令中的-d表示在detached mode(detached mode大家可以理解成讓容器在后臺(tái)運(yùn)行)下運(yùn)行Image湿颅,docker image運(yùn)行時(shí)與shell斷開連接。這樣的話所有對(duì)容器的操作類似網(wǎng)絡(luò)連接粥诫,共享操作等等都不會(huì)再接受命令行的命令控制油航。

指令-p表示將當(dāng)前宿主機(jī)器的9000端口與容器的80端口進(jìn)行映射,這樣的話對(duì)外我們通過9000端口就可以訪問到80端口了

后臺(tái)運(yùn)行與前臺(tái)運(yùn)行的區(qū)別:

當(dāng)container運(yùn)行在后臺(tái)模式臀脏,所有I/O數(shù)據(jù)只能通過網(wǎng)絡(luò)資源或者共享卷組來進(jìn)行交互劝堪。因?yàn)閏ontainer不再監(jiān)聽執(zhí)行docker run的這個(gè)終端命令窗口。但是我們可以通過執(zhí)行docker attach來重新掛載這個(gè)container揉稚。

當(dāng)container運(yùn)行在前臺(tái)模式秒啦,docker會(huì)啟動(dòng)這個(gè)container,同時(shí)將當(dāng)前的命令行窗口掛載到container的標(biāo)準(zhǔn)輸入搀玖,標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤中余境。也就是container中所有的輸出,我們都可以在當(dāng)前窗口中查看到灌诅。甚至docker可以虛擬出一個(gè)TTY窗口芳来,來執(zhí)行信號(hào)中斷,這些都是可以通過命令配置的猜拾。

瀏覽器中訪問ASP.Net MVC 站點(diǎn)

容器啟動(dòng)后即舌,可以通過http://locahost:9000 來訪問當(dāng)前運(yùn)行的站點(diǎn),如圖Image-14所示:

Image-14

還有另外一種訪問方式挎袜,即通過container運(yùn)行的IP+Port的方式訪問:http://{IP}:{Port}, 其中IP為container的IP顽聂,Port為container暴露的端口,不指定的話默認(rèn)暴露的是80端口盯仪,我們可以通過如下指令獲取到container的IP:?

docker inspect -f '{{.NetworkSettings.Networks.nat.IPAddress}}' container-name? 如圖Image-15所示:

Image-15

可以通過訪問地址http://cotainerip 來訪問當(dāng)前運(yùn)行的站點(diǎn)紊搪,如圖Image-16所示:

Image-16

以上便完成了容器化Asp.Net MVC Web應(yīng)用程序,希望這個(gè)簡單的例子能幫助大家進(jìn)一步了解docker相關(guān)的基礎(chǔ)知識(shí)全景,docker中提供了很多指令耀石,大家可以通過docker --help來進(jìn)行查看,同時(shí)也可以訪問docker的官方網(wǎng)站進(jìn)行進(jìn)一步的指令學(xué)習(xí)爸黄,網(wǎng)站地址:

https://docs.docker.com/engine/reference/commandline/port/

上一篇(Docker容器中運(yùn)行.net framework控制臺(tái)程序)

下一篇(Docker容器中運(yùn)行.Net Core應(yīng)用程序)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末滞伟,一起剝皮案震驚了整個(gè)濱河市揭鳞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诗良,老刑警劉巖汹桦,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鉴裹,居然都是意外死亡舞骆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門径荔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來督禽,“玉大人,你說我怎么就攤上這事总处”繁梗” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵鹦马,是天一觀的道長胧谈。 經(jīng)常有香客問我,道長荸频,這世上最難降的妖魔是什么菱肖? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮旭从,結(jié)果婚禮上稳强,老公的妹妹穿的比我還像新娘。我一直安慰自己和悦,他們只是感情好退疫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鸽素,像睡著了一般褒繁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上馍忽,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天棒坏,我揣著相機(jī)與錄音,去河邊找鬼舵匾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谁不,可吹牛的內(nèi)容都是我干的坐梯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼刹帕,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼吵血!你這毒婦竟也來了谎替?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蹋辅,失蹤者是張志新(化名)和其女友劉穎钱贯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侦另,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秩命,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了褒傅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弃锐。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖殿托,靈堂內(nèi)的尸體忽然破棺而出霹菊,到底是詐尸還是另有隱情,我是刑警寧澤支竹,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布旋廷,位于F島的核電站,受9級(jí)特大地震影響礼搁,放射性物質(zhì)發(fā)生泄漏饶碘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一叹坦、第九天 我趴在偏房一處隱蔽的房頂上張望熊镣。 院中可真熱鬧,春花似錦募书、人聲如沸绪囱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鬼吵。三九已至,卻和暖如春篮赢,著一層夾襖步出監(jiān)牢的瞬間齿椅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工启泣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涣脚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓寥茫,卻偏偏與公主長得像遣蚀,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355