🐳【Docker 打包 .NET Core 應用程式】從入門到上線的完整流程教學

 

🔍 前言

你是否也想將 .NET Core 應用程式打包進 Docker,讓部署變得更彈性、更雲端?這篇教學將一步步帶你從環境準備、Dockerfile 撰寫、建構映像到運行容器,搭配實務建議與圖示說明,幫助你一次搞懂 .NET Core 容器化流程


🧰 1. 開始之前:準備工具

請先確認以下工具已安裝於系統中:

  • ✅ Docker(建議搭配 Docker Desktop)

  • ✅ Visual Studio Code

  • ✅ .NET SDK(建議使用 .NET 8)


📦 2. 撰寫 Dockerfile

在專案根目錄中新增 Dockerfile,內容如下:

  1. # 使用 .NET 執行階段作為基礎映像
  2. FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
  3. WORKDIR /app
  4. # 使用 SDK 建構應用程式
  5. FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
  6. WORKDIR /src
  7. COPY . .
  8. RUN dotnet restore
  9. RUN dotnet publish -c Release -o /app
  10. # 將 build 結果複製到 base 映像中
  11. FROM base AS final
  12. WORKDIR /app
  13. COPY --from=build /app .
  14. ENTRYPOINT ["dotnet", "Net.dll"]
  15. # 開放容器內部端口(不代表自動對外)
  16. EXPOSE 5160

📌 注意:EXPOSE 只是聲明開放端口,並不會主動映射主機端口,需在 docker run 時指定。


🔧 3. 建構 Docker 映像檔

在終端機執行以下指令,依據 Dockerfile 建立映像:

docker build -t net_app .

這會產生一個名為 net_app 的映像,供後續使用。


▶️ 4. 執行容器並開放對外端口

接著執行容器,並將內部的 80 port 映射到主機的 5163:

docker run -d -p 5163:80 --name net_container net_app

說明:

  • -d:背景執行容器

  • -p 5163:80:將容器的 80 映射到主機 5163

  • --name net_container:容器命名為 net_container


🌐 5. 設定應用程式監聽 0.0.0.0

為了讓應用可從外部訪問,記得設定 ASP.NET Core 監聽所有 IP(非僅限 localhost):

ENV ASPNETCORE_URLS=http://+:80

你也可以將此設定加進 appsettings.json.env 檔依情況調整。


✅ 6. 測試應用是否成功運行

使用瀏覽器或終端機測試服務是否啟動成功:

curl http://localhost:5163

若一切正常,應會收到應用程式的回應。


🧹 7. 清理資源(可選)

當你不再需要該容器或映像,可使用以下指令移除:

docker stop net_container

docker rm net_container

docker rmi net_app

這樣可以避免本機堆積不必要的容器與映像資源。


🧠 總結

本文帶你從零開始,學會如何:

  1. 撰寫 Dockerfile

  2. 建立與執行 Docker 映像

  3. 設定對外通訊與環境變數

  4. 測試與管理容器資源


📬 後續教學預告

若你有興趣,我將在後續分享:

  • 如何整合 Docker Compose 部署多服務

  • .NET 與 PostgreSQL / Redis 的 Docker 範例

  • 使用 GitHub Actions 自動建構 Docker 映像

歡迎留言與我分享你遇到的問題或期待的主題 👇
一起把 .NET 工程玩到極致!

留言

這個網誌中的熱門文章

🛠【ASP.NET Core + Oracle】解決 ORA-00904 "FALSE": 無效的 ID 錯誤與資料欄位動態插入顯示問題

🛠【實戰排除教學】從 VS Code 的 _logger 錯誤,到 PowerShell 找不到 npm/serve,再到 Oracle ORA-03135 連線中斷——一次搞懂!

🔎如何在 Oracle PL/SQL 儲存過程中為文字欄位加入換行符號(CHR(10))——以 Updlcmremark 為例