1. 程式人生 > >Linux伺服器使用Docker部署.net Core專案

Linux伺服器使用Docker部署.net Core專案

釋出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時遇到的問題