本篇文章通過一個例項為大家演示如何在Docker容器中執行ASP.NET Core應用程式。
生成ASP.NET Core應用程式
開啟vs建立一個ASP.NET Core Application,如圖所示:
開啟Index.cshtml, 修改裡面的內容如圖所示:
直接執行application,如圖所示:
釋出應用程式(可以理解成為應用程式打包)
在vs中右鍵單擊web專案,然後在彈出的menu中選擇Publish,彈出如圖所示對話方塊:
點選Create Profile按鈕,回到VS窗體中如圖所示頁面:
點選Publish按鈕,開始Publish當前應用程式,成功Publish之後,會在VS Output中看到如圖所示的資訊:
我們成功將當前應用程式Publish到了制定的PublishOutput資料夾中,如圖所示:
新增Dockerfile檔案
對dockerfile陌生的小夥伴可以檢視(在Docker容器中執行.Net Framework控制檯應用程式)文章中對Dockfile的解釋。
在Dockerfile檔案中我們新增如下命令:
FROM microsoft/dotnet:2.2-aspnetcore-runtime-nanoserver-1803
通過FROM指令來指定我們所要使用的基本映象
WORKDIR /app
通過workdir指令來設定dockerfile中所寫的命令(例如:RUN,ENTRYPOINT等等)在container中執行的地址
COPY PublishOutput/ /app
通過COPY指令來將publish的包copy到container中指定的地址
ENTRYPOINT ["dotnet", "HelloDockerNetCore.dll"]
通過ENTRYPOINT指令我們指定在容器啟動時要執行的應用程式
建立映象(Image)
開啟cmd命令列工具,進入到Dockerfile所在的資料夾,鍵入如下命令:
docker build -t hellodockercoreimage:v1 . 如圖所示:
docker通過build指令來建立映象(Image),build指令後的-t表示的是指定當前Image的Tag,大家可以理解成Image的Name,映象名稱冒號後面的v1大家可以理解成當前Image的版本號,如果不指定的話預設會為latest,最後的. 表示的是Dockerfile所在的當前目錄。上面的指令可以理解成基於Dockerfile建立一個v1版本的名為hellodockercoreimage的映象,執行該命令會得到如圖所示的結果:
截圖中顯示了Dockerfile中我們所寫的指令的執行情況,最後會提示你Image建立成功。如果大家是第一次執行FROM指令,docker daemon會去docker registry中拉取該基映象,這個過程相當於下載該映象到本地,執行起來會慢一些,大家不要著急。
我們通過docker images指令來檢視建立的映象,如圖所示:
執行容器
通過執行指令docker run -d -p 9001:80 --name hellodockercorecontainer hellodockercoreimage:v1 來執行容器,結果如圖所示,返回的是當前Container的ID,C:\ProgramData\Docker\windowsfilter\ 中找到該容器:
該指令表達的意思是基於hellodockercoreimage:v1映象在detached模式下執行一個名為hellodockercorecontainer的容器,並且將宿主機器的9001埠與容器的80埠進行對映
瀏覽器中訪問ASP.Net Core 站點
容器啟動後,可以通過http://locahost:9001 來訪問當前執行的站點,如圖所示:
還有另外一種訪問方式,即通過container執行的IP+Port的方式訪問:http://{IP}:{Port}, 其中IP為container的IP,Port為container暴露的埠,不指定的話預設暴露的是80埠,我們可以通過如下指令獲取到container的IP:
docker inspect -f '{{.NetworkSettings.Networks.nat.IPAddress}}' container-name
可以通過訪問地址http://cotainerip 來訪問當前執行的站點
以上我們便完成了對ASP.NET Core應用程式容器化的過程,目前在VS2017中已經整合了對Docker的support,即我們可以在建立project的時候就直接指定當前project需要docker支援,這樣建立出來的程式就預設帶了Dockerfile檔案,如圖所示,在建立工程的時候勾選中Enable Docker Support:
上一篇(在Docker容器中執行ASP.Net MVC應用程式)