文章目錄
將 ASP.NET Core 部署至 Docker 中
最近專案在 macOS 上開發 ASP.NET Core 的 Web API,完成後再透過 Docker 包成 image 準備建立 container,流程很直覺,加上 CI CD 同事都已經準備好了,所以就沒有特別花時間,直到最近要 debug 某個新功能,需要頻繁 build image,才趁這個機會紀錄一下
保哥文章 如何將 ASP.NET Core 2.1 網站部署到 Docker 容器中 說明地很仔細 (推薦先看保哥文章理解流程,再來抄新的 dockerfile 即可),但因為 base image 有 rename 過,為了抄起來比較快,於是我紀錄一下新的用法
基本環境說明
- macOS Mojave 10.14.4
- Docker Engine - Community 18.09.2
- .NET Core 2.2.101
- ASP.NET Core 2.2.0
預設 Web App (Model-View-Controller) 專案範本
將專案放於
TestDokcer
資料夾中 (這個資料夾名稱會影響 Dockerfile 內容)
專案資料夾結構
- TestDokcer
- TestDokcer
- TestDokcer.csproj
- ….
- TestDocker.sln
- Dockerfile
Dockerfile
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /app
# 複製 sln csproj and restore nuget
COPY *.sln .
# 目標路徑資料夾要與來源路徑資料夾名稱相同(因 sln 已儲存專案路徑)
COPY TestDocker/*.csproj ./TestDocker/
# nuget restore
RUN dotnet restore
# 複製其他檔案
COPY TestDocker/. ./TestDocker/
WORKDIR /app/TestDocker
# 使用 Release 建置專案並輸出至 out
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
# 將產出物複製至 app 下
COPY --from=build /app/TestDocker/out ./
# 啟動 TestDokcer
ENTRYPOINT ["dotnet", "TestDocker.dll"]
Build image
在 Dockerfile 所在資料夾的上一層執行
語法
docker build {folderName} -t {name}:{tag}
範例
docker build TestDocker -t yowko/aspnetcore:v1
實際使用
將本機 8080
指向 container 中的 80
port (雖然上面的 dockerfile 沒有 expose 80,而是在 base image 已經先處理了)
docker run -d -p 8080:80 yowko/aspnetcore:v1
心得
近期專案已經全數走在 .NET Core 與 Docker 上,最近開始實際部署,這才發現雖然是簡單的幾行指令也隱藏不少細節跟眉角呀
相較於之前使用 Windows Container 的經驗,.NET Core 在 linux container 上還是順利些,啟動速度、image 大小、debug 難度都是如此,有這樣的工作環境真的該感恩呀 哈哈
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。