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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM