Docker
, .NET Core 3.1
, Synology
, MVC
本文由 Grok AI 協助編輯
本文介紹如何在 Synology NAS 的 Docker 環境中部署 .NET Core 3.1 應用程式,並以 Visual Studio 產生的簡單範例網頁為例,展示從專案建立、開發到最終部署的完整流程。本文旨在幫助讀者理解基本的 ASP.NET Core 應用程式部署流程,無需涉及複雜的自訂功能。
實驗環境
3.1.xxx
的版本號。若未顯示,請從 官方網站 下載並安裝。SimpleWeb
。D:\NewProjects\
。.NET Core 3.1
。建立完成後,專案結構如下:
這是 ASP.NET Core MVC 的標準結構,提供了一個簡單的首頁(Index
)和隱私頁面(Privacy
),由 HomeController
控制。此結構是 ASP.NET Core MVC 的預設模板,後續將用於展示基本的部署流程。
ASP.NET Core 使用 MVC(Model-View-Controller) 架構,這是一種常見的設計模式,用於分離應用程式的業務邏輯、資料處理和使用者介面。以下是 MVC 的核心組成部分:
模型(Model):
ErrorViewModel.cs
是預設模型,用於處理錯誤頁面資料。視圖(View):
Views/Home/Index.cshtml
是首頁,Views/Home/Privacy.cshtml
是隱私頁面。控制器(Controller):
HomeController.cs
處理對 /
和 /Privacy
的請求。/
)。HomeController
)接收請求,調用對應動作(Index
)。Index.cshtml
),視圖渲染成 HTML 返回給使用者。這種分層設計提高了代碼的可維護性和可測試性,是 ASP.NET Core 的核心特性之一。在此範例中,MVC 實現了基本的頁面導航功能。
此範例應用程式是 Visual Studio 自動生成的預設 MVC 專案,包含以下功能:
HomeController
的 Index
動作提供,顯示歡迎訊息。HomeController
的 Privacy
動作提供,展示簡單的隱私聲明。ErrorViewModel
和 Error.cshtml
支援,用於顯示異常資訊。此應用程式不涉及資料庫或其他複雜邏輯,僅作為展示部署流程的基礎範例。
以下是應用程式的核心檔案結構:
此結構展示了預設應用程式如何利用 MVC 提供簡單的網頁功能。
為了在 Synology NAS 的 Docker 環境中運行此應用程式,我們需要創建一個適配 .NET Core 3.1 的 Docker 映像。以下是範例的 Dockerfile
:
mcr.microsoft.com/dotnet/aspnet:3.1
,包含 .NET Core 3.1 運行時。/app
,應用程式檔案將被複製到此目錄。Asia/Taipei
,確保容器時間與本地一致。dotnet
命令啟動應用程式,具體 DLL 檔案在部署時指定。我們將透過 Windows 建立建構腳本,並在 Synology NAS 上使用 DSM 工作排程器執行映像建構。
build.sh
的檔案,內容如下:
/volume1/docker/dotnet-runtime/
。您可以使用 DSM 的「檔案站」或 FTP 工具完成上傳。build.sh
與 Dockerfile
皆存在 /volume1/docker/dotnet-runtime/
目錄下。Build Dotnet Runtime
root
開機
(此設定僅為範例,實際可根據需求調整為其他觸發條件)不勾選
sh /volume1/docker/dotnet-runtime/build.sh
Build Dotnet Runtime
,右鍵點擊並選擇「執行」以立即建構映像。建構完成後,進入 DSM 的「Docker」套件,在「映像」標籤中檢查是否出現 dotnet-runtime:3.1
。若成功,則映像已準備好用於部署。
在 Visual Studio 中:
SimpleWeb
專案,選擇「發佈」。./publish
。或者,使用以下命令直接將應用程式發佈到 NAS 的共享路徑(假設已映射網路磁碟機):
-c Release
:以 Release 配置編譯,優化性能。-r linux-x64
:指定運行時為 Linux 64 位,適配 Synology NAS 的 Docker 環境。-f netcoreapp3.1
:指定框架為 .NET Core 3.1。--self-contained false
:不包含 .NET Core 運行時,依賴容器中的運行時。-o "\\172.19.48.55\docker\SimpleWeb"
:將發佈檔案直接輸出到 NAS 的共享資料夾(IP 為 172.19.48.55
)。若未使用上述命令直接發佈,則需手動將 ./publish
目錄中的檔案複製到 NAS 的卷冊路徑,例如 /volume1/docker/mywebapp/
。若 NAS 未設置共享路徑映射,請使用 DSM 的「檔案站」手動上傳。若已使用 dotnet publish
命令,則無需手動傳輸,因為檔案已直接發佈至 NAS 的共享路徑 \\172.19.48.55\docker\SimpleWeb
,對應 NAS 的 /volume1/docker/mywebapp/
(假設共享路徑已正確映射)。
dotnet-runtime:3.1
;否則點擊「新增」 > 「從檔案新增」,選擇本機的 dotnet-runtime:3.1
映像。dotnet-runtime:3.1
。simpleweb-container
。62005
,容器端口設為 5000
。/volume1/docker/mywebapp/
,容器路徑設為 /app
。dotnet /app/SimpleWeb.dll
。在瀏覽器中輸入 http://<NAS_IP>:62005
,確認應用程式正常運行並顯示預設的 ASP.NET Core 首頁。若需測試隱私頁面,可導航至 /Privacy
。
在部署過程中,可能遇到靜態檔案(如 CSS)無法載入的問題。以下是解決方案:
修改內容根路徑:
Program.cs
,修改如下:
Startup.cs
的 Configure
方法中確認:
重新發佈與部署:
/volume1/docker/mywebapp/
,重啟容器。Program.cs
或 appsettings.json
中調整,例如設置 ASPNETCORE_URLS=http://+:5000
。這篇文章展示了一個簡單的 .NET Core 3.1 MVC 應用程式從建立到部署至 Synology NAS Docker 環境的完整流程。讀者可基於此範例,進一步擴展應用程式功能,例如加入資料庫支援(將在下一篇文章中介紹)。