【.Net Core】將應用部署至Docker上
.Net Core的橫空出世,讓.Net擺脫以往只能在Windows系統上執行的情況,如今不論是Windows、Linux甚至是Mac上都可以執行,但當實際開發完成要進行部署後,才發現又是一個麻煩的開始,好加在他也支援部署到Docker上執行。
本文實作環境如下:
- Visual Studio Mac Version
- .Net Core 3.1
- Docker on Synology NAS
#建立 Dockerfile
在 Visual Studio 內對專案目錄點擊右鍵,選擇新增,會看到新增 Docker 支援。點選之後,IDE 會自動產出 Dockerfile 出來。
只是這個自動產出的 Dockerfile 可能還無法直接使用:
- csproj 檔案的路徑並不正確
一但檔案路徑不正確,在執行這個 Dockerfile 的時候就會因為找不到檔案而錯誤終止 (File not exitst) 。 - 引用的 SDK 版本錯誤
由於我的專案是 .Net Core 3.1 ,但他產出的 Dockerfile 卻是幫我引入 .Net Framework 3.1 的 SDK,這會造成在執行這個 Docker 的時候產生找不到 SDK 的錯誤,所以也要依照自己專案的版本去做修正。根據微軟官方的文件, SDK 的 Image 可以分為幾種:
- runtime:{version}
.NET 多重架構:支援 Linux 和 Windows Nano Server,視 Docker 主機而定。 - aspnet:{version}
ASP.NET Core 多架構:支援 Linux 和 Windows Nano Server,視 Docker 主機而定。aspnetcore 映像有幾項針對 ASP.NET Core 所做的最佳化。 - aspnet:{version}-buster-slim
.NET 5 執行時間-僅適用于 Linux Debian 發行版本 - aspnet:{version}-nanoserver-1809
僅限 .NET 執行時間-僅限 Windows Nano Server (Windows Server 1809 版)
#產生 Docker Image
當 Dockerfile 搞定之後,就可以來 Build Docker Image 了,用終端機切換到專案底下( Dockerfile 的所在位置),因為我要部署的 Nas 上,而且專案本來就有同步到 Nas 上,所以直接用終端機 SSH 登入進去 Nas,然後一樣切到專案資料夾底下,並執行建置動作:
#部署Docker
Docker Image 建置完成後就可以把部署起來,這邊 Synology 的 Nas 有提供 GUI 的操作,所以我就直接在系統上做操作,設置對應的 Port Number 之後就可以執行了。
寫這篇只是為了記錄一下怎麼把 .Net Core 的專案部署到 Docker 上面,不然每次要用到又要上網找一堆文,是說有 .Net Core 之後要給客戶 Demo 就方便多了,可以把 AWS 退掉了,有一台 Nas 就可以搞定了!