發布ASP.NET Core項目
和普通的項目發布一樣,將項目發布到目標文件夾中
構建Dockerfile文件
在目標文件根目錄新建Dockerfile文件(沒有后綴)
1
2
3
4
5
|
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目錄下,使用命令構建成鏡像
1
|
docker build -t testcore . //-t 指定鏡像名 . 表示Dockerfile所在目錄 |
注意 dockerfile中基于microsoft/aspnetcore或microsoft/dotnet來構建鏡像(dotnet>aspnetcore)需要以服務器上安裝的鏡像版本做區分
構建成功,在鏡像中可以看到新建的鏡像
2.將鏡像發布為容器
1
2
3
4
5
6
|
docker run --name testapp -d -p 8000:80 - v /www : /app testcore --name指定容器名稱 -d 指定容器后臺運行 -p 指定外部8000端口映射到容器80端口 - v 綁定數據卷 /www 到容器內的 /app (本地目錄:容器內目錄)本地目錄必須為絕對路徑 testcore鏡像名 |
3.查看容器是否是否處于運行狀態,若啟動失敗顯示為exit,可查看日志
1
2
3
4
|
docker ps -a // 查看所有容器的運行狀態 docker exec -it testapp bash // 若容器正在運行,進入容器內部 docker logs testapp // 若容器未運行,查看報錯日志 |
4.請求網站查看網站是否運行成功
1
2
|
curl 0.0.0.0:8000 curl -s -D - localhost:8000 -o /dev/null // 查看請求返回信息 |
最后查看防火墻端口開放情況,以及阿里云后臺安全組端口開放情況(如果你是用的阿里云服務),再通過外網訪問瞅瞅
5.更新代碼
由于在創建容器的時候映射了數據卷,則當有靜態文件更新的時候,會自動更新到容器內。
但是當有dll文件更新時,需要手動重啟一下容器
1
|
docker restart testapp |
以上,實現了將一個Asp.Net Core MVC項目發布到docker中的全過程。目前容器中只有一個dotnet鏡像,通過地址訪問網站實際上直接訪問的Kestrel服務器。
一些額外的想法
Kestrel服務器只是一個輕量級的web服務器,并且不支持基于主機名的綁定(如果1臺服務器部署了多個 ASP.NET Core 站點,每個站點需要使用不同的端口)
出于安全性考慮(包括但不限于適當的超時,大小的限制,以及并發連接限制等問題)需要在Kestrel和Internet之間加入一個反向代理服務器(IIS,Nginx或者Apache)
下一篇,描述一下我在使用nginx轉發請求給Kestrel時遇到的問題。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。
原文鏈接:https://www.cnblogs.com/cplemom/p/11142857.html