在Docker容器中運行現有的.Net Framework應用程序不須要對應用程序進行任何修改,咱們須要建立包含應用程序的Docker鏡像,而後啓動容器便可。本篇主要講解如何在Docker容器中運行ASP.NET MVC應用程序。html
打開VS建立一個ASP.NET Web Application(.NET Framework),如圖Image-1所示:web
打開Index.cshtml,修改裏面的內容如圖Image-2所示:docker
直接運行application,如圖Image-3所示:shell
在vs中右鍵單擊web項目,而後在彈出的menu中選擇Publish,彈出如圖Image-4所示的對話框:windows
選擇Custom,彈出如圖Image-5所示對話框,填寫custom的profile name:瀏覽器
點擊OK button,彈出如圖Image-6所示對話框,Publish method選擇File System,Target location選擇你想要publish的地址:網絡
點擊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
點擊Next Button而後點擊Publish,在VS的控制檯中咱們會看到如圖Image-8所示的內容,表示publish成功:工具
能夠經過訪問咱們以前指定的publish location來看publish的包結果,如圖Image-9所示:post
對dockerfile陌生的小夥伴能夠查看(在Docker容器中運行.Net Framework控制檯應用程序)文章中對Dockfile的解釋。
在Dockerfile文件中咱們添加以下兩行命令:
FROM microsoft/aspnet
經過FROM指令來指定咱們所要使用的基本鏡像
COPY /PublishOutput/ /inetpub/wwwroot
經過COPY來將咱們publish的包copy到container中
此Dockerfile不須要包含ENTRYPOINT指令。使用IIS運行服務時,IIS進程是入口點,配置爲aspnet基本鏡像中啓動。
打開cmd命令行工具,進入到Dockerfile所在的文件夾,鍵入以下命令:
docker build -t hellodockerweb:v1 . 以下圖Image-10所示:
docker經過build指令來建立鏡像(Image), build 指令後的-t 表示的是指定當前Image的Tag,你們能夠理解成Image的Name,鏡像名稱冒號後面的v1你們能夠理解成當前Image的版本號,若是不指定的話默認會爲latest,最後的. 表示的是Dockerfile所在的當前目錄。上面的指令能夠理解成基於Dockerfile建立一個v1版本的名爲hellodockerweb的鏡像。執行該命令會獲得以下圖Image-11所示的結果:
截圖中顯示了Dockerfile中咱們所寫的兩個指令的執行狀況,最後會提示你Image建立成功。若是你們是第一次執行FROM microsoft/aspnet指令,docker daemon會去docker registry中拉取該基鏡像,這個過程至關於下載該鏡像到本地,執行起來會慢一些,你們不要着急。
咱們經過docker images指令來查看建立的鏡像,以下圖Image-12所示:
經過運行指令docker run -d -p 9000:80 --name hellodockerwebcontainer hellodockerweb:v1 來運行容器,結果如圖Image-13所示,返回的是當前Container的ID,咱們能夠在地址C:\ProgramData\Docker\windowsfilter\ 中找到該容器:
該指令表達的意思是基於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窗口,來執行信號中斷,這些都是能夠經過命令配置的。
容器啓動後,能夠經過http://locahost:9000 來訪問當前運行的站點,如圖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所示:
能夠經過訪問地址http://cotainerip 來訪問當前運行的站點,如圖Image-16所示:
以上便完成了容器化Asp.Net MVC Web應用程序,但願這個簡單的例子能幫助你們進一步瞭解docker相關的基礎知識,docker中提供了不少指令,你們能夠經過docker --help來進行查看,同時也能夠訪問docker的官方網站進行進一步的指令學習,網站地址: