釋出ASP.NET Core專案
和普通的專案釋出一樣,將專案釋出到目標資料夾中
構建Dockerfile檔案
在目標檔案根目錄新建Dockerfile檔案(沒有字尾)
FROM microsoft/dotnet//基於'microsoft/dotnet' 來構建映象
COPY . /app //拷貝專案資料夾中的所有檔案到docker容器中的app資料夾 這裡是兩個引數
WORKDIR /app //設定工作目錄為 '/app' 資料夾,即容器啟動預設的資料夾
EXPOSE 80 //設定Docker容器對外暴露80埠
CMD ["dotnet", "Core.Web.dll"] //使用'dotnet Core. Web.dll'來執行應用程式
上傳專案檔案
1.將專案構建為映象
將檔案上傳到Linux的www目錄下,使用命令構建成映象
docker build -t testcore . //-t 指定映象名 . 表示Dockerfile所在目錄
注意 dockerfile中基於microsoft/aspnetcore或microsoft/dotnet來構建映象(dotnet>aspnetcore)需要以伺服器上安裝的映象版本做區分
構建成功,在映象中可以看到新建的映象
2.將映象釋出為容器
docker run --name testapp -d -p 8000:80 -v /www:/app testcore
--name指定容器名稱
-d 指定容器後臺執行
-p 指定外部8000埠對映到容器80埠
-v 繫結資料卷/www到容器內的/app (本地目錄:容器內目錄)本地目錄必須為絕對路徑
testcore映象名
3.檢視容器是否是否處於執行狀態,若啟動失敗顯示為exit,可檢視日誌
docker ps -a //檢視所有容器的執行狀態
docker exec -it testapp bash //若容器正在執行,進入容器內部
docker logs testapp//若容器未執行,檢視報錯日誌
4.請求網站檢視網站是否執行成功
curl 0.0.0.0:8000
curl -s -D - localhost:8000 -o /dev/null //檢視請求返回資訊
最後檢視防火牆埠開放情況,以及阿里雲後臺安全組埠開放情況(如果你是用的阿里雲服務),再通過外網訪問瞅瞅
5.更新程式碼
由於在建立容器的時候對映了資料卷,則當有靜態檔案更新的時候,會自動更新到容器內。
但是當有dll檔案更新時,需要手動重啟一下容器
docker restart testapp
以上,實現了將一個Asp.Net Core MVC專案釋出到docker中的全過程。目前容器中只有一個dotnet映象,通過地址訪問網站實際上直接訪問的Kestrel伺服器。
一些額外的想法
Kestrel伺服器只是一個輕量級的web伺服器,並且不支援基於主機名的繫結(如果1臺伺服器部署了多個 ASP.NET Core 站點,每個站點需要使用不同的埠)
出於安全性考慮(包括但不限於適當的超時,大小的限制,以及併發連線限制等問題)需要在Kestrel和Internet之間加入一個反向代理伺服器(IIS,Nginx或者Apache)
下一篇,描述一下我在使用nginx轉發請求給Kestrel時遇到的問題。