在Docker容器中運行ASP.NET MVC應用程序

在Docker容器中運行現有的.Net Framework應用程序不須要對應用程序進行任何修改,咱們須要建立包含應用程序的Docker鏡像,而後啓動容器便可。本篇主要講解如何在Docker容器中運行ASP.NET MVC應用程序。html

生成Asp.Net MVC 應用程序

打開VS建立一個ASP.NET Web Application(.NET Framework),如圖Image-1所示:web


Image-1

打開Index.cshtml,修改裏面的內容如圖Image-2所示:docker

Image-2

直接運行application,如圖Image-3所示:shell

Image-3

發佈應用程序(你們能夠理解成爲應用程序打包)

在vs中右鍵單擊web項目,而後在彈出的menu中選擇Publish,彈出如圖Image-4所示的對話框:windows

Image-4

選擇Custom,彈出如圖Image-5所示對話框,填寫custom的profile name:瀏覽器

Image-5

點擊OK button,彈出如圖Image-6所示對話框,Publish method選擇File System,Target location選擇你想要publish的地址:網絡

Image-6

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

Image-7

點擊Next Button而後點擊Publish,在VS的控制檯中咱們會看到如圖Image-8所示的內容,表示publish成功:工具

Image-8

能夠經過訪問咱們以前指定的publish location來看publish的包結果,如圖Image-9所示:post

Image-9

添加Dockerfile文件

對dockerfile陌生的小夥伴能夠查看(在Docker容器中運行.Net Framework控制檯應用程序)文章中對Dockfile的解釋。

在Dockerfile文件中咱們添加以下兩行命令:

FROM microsoft/aspnet

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

COPY /PublishOutput/ /inetpub/wwwroot

經過COPY來將咱們publish的包copy到container中

此Dockerfile不須要包含ENTRYPOINT指令。使用IIS運行服務時,IIS進程是入口點,配置爲aspnet基本鏡像中啓動。

建立鏡像(Image)

打開cmd命令行工具,進入到Dockerfile所在的文件夾,鍵入以下命令:

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

Image-10

docker經過build指令來建立鏡像(Image), build 指令後的-t 表示的是指定當前Image的Tag,你們能夠理解成Image的Name,鏡像名稱冒號後面的v1你們能夠理解成當前Image的版本號,若是不指定的話默認會爲latest,最後的. 表示的是Dockerfile所在的當前目錄。上面的指令能夠理解成基於Dockerfile建立一個v1版本的名爲hellodockerweb的鏡像。執行該命令會獲得以下圖Image-11所示的結果:

Image-11

截圖中顯示了Dockerfile中咱們所寫的兩個指令的執行狀況,最後會提示你Image建立成功。若是你們是第一次執行FROM microsoft/aspnet指令,docker daemon會去docker registry中拉取該基鏡像,這個過程至關於下載該鏡像到本地,執行起來會慢一些,你們不要着急。

咱們經過docker images指令來查看建立的鏡像,以下圖Image-12所示:

Image-12

運行容器

經過運行指令docker run -d -p 9000:80 --name hellodockerwebcontainer hellodockerweb:v1 來運行容器,結果如圖Image-13所示,返回的是當前Container的ID,咱們能夠在地址C:\ProgramData\Docker\windowsfilter\ 中找到該容器:

Image-13

該指令表達的意思是基於hellodockerweb:v1鏡像在detached模式下運行一個名爲hellodockerwebcontainer的容器,而且將宿主機器的9000端口與容器的80端口進行映射

指令中的-d表示在detached mode(detached mode你們能夠理解成讓容器在後臺運行)下運行Image,docker image運行時與shell斷開鏈接。這樣的話全部對容器的操做相似網絡鏈接,共享操做等等都不會再接受命令行的命令控制。

指令-p表示將當前宿主機器的9000端口與容器的80端口進行映射,這樣的話對外咱們經過9000端口就能夠訪問到80端口了

後臺運行與前臺運行的區別:

當container運行在後臺模式,全部I/O數據只能經過網絡資源或者共享卷組來進行交互。由於container再也不監聽執行docker run的這個終端命令窗口。可是咱們能夠經過執行docker attach來從新掛載這個container。

當container運行在前臺模式,docker會啓動這個container,同時將當前的命令行窗口掛載到container的標準輸入,標準輸出和標準錯誤中。也就是container中全部的輸出,咱們均可以在當前窗口中查看到。甚至docker能夠虛擬出一個TTY窗口,來執行信號中斷,這些都是能夠經過命令配置的。

瀏覽器中訪問ASP.Net MVC 站點

容器啓動後,能夠經過http://locahost:9000 來訪問當前運行的站點,如圖Image-14所示:

Image-14

還有另一種訪問方式,即經過container運行的IP+Port的方式訪問:http://{IP}:{Port}, 其中IP爲container的IP,Port爲container暴露的端口,不指定的話默認暴露的是80端口,咱們能夠經過以下指令獲取到container的IP:

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

Image-15

能夠經過訪問地址http://cotainerip 來訪問當前運行的站點,如圖Image-16所示:

Image-16

以上便完成了容器化Asp.Net MVC Web應用程序,但願這個簡單的例子能幫助你們進一步瞭解docker相關的基礎知識,docker中提供了不少指令,你們能夠經過docker --help來進行查看,同時也能夠訪問docker的官方網站進行進一步的指令學習,網站地址:

docs.docker.com/engine/refe…


上一篇(Docker中運行.net framework控制檯程序)

下一篇(Docker中運行.Net Core應用程序)

相關文章
相關標籤/搜索