這篇文章教你從頭開始建立一個 Docker 環境,執行 .net 8 的 WebAPI。
步驟
1. 下載 Docker Desktop。
2. 建立 Dockerfile。
3. 建立 Docker Image,把 my-api 代換成專案名字。
docker build -t my-api .
4. 啟動 container。
docker run -d -p 8080:8080 -e ASPNETCORE_ENVIRONMENT=Development -v xxx/secrets.Development.json:/app/secrets.development.json --name my-api-container my-api
常用的參數說明如下:
| 參數 | 說明 |
|---|---|
| -d | 在背景執行 container 並印出 ID |
| -p | 設定對應的 port |
| -e | 設定環境變數 |
| -v | 設定要掛載的檔案位置 |
| -name | 指派 container 名稱 |
參考資料:docker container run - Docker Docs
常見的 Secret 和 Log 可以用 -v 掛載到實體目錄,需要更改 API 本身設定的 Secret 和 Log 路徑。
5. (建議) 加入 .dockerignore,略過那些不用包進映像檔的檔案。
Dockerfile 檔案
基本指令如下:
| 指令 | 說明 |
|---|---|
| FROM | 要從哪裡取得映像檔 |
| WORKDIR |
容器啟動時的工作目錄 |
| COPY | COPY - 複製 ${目前本機目標位置的檔案} 到 ${容器目標位置} |
| EXPOSE | 輸出的 Port |
| USER | 執行的使用者 |
編譯時可以用較完整的 .NET 8 SDK 映像檔,包含編譯器和其它的 .NET 依賴元件;實際執行時可以用只包含 ASP.NET 執行環境的映像檔,因為容量較小,便於部屬。
官方 .NET Docker 映像 - .NET - Microsoft Learn
[CI/CD Note] — 透過 Docker 快速建立及部署環境 - RexHung’s Blog
檢查是不是在 Docker 內運作
要讓程式檢查是不是在 Docker 內運作,可以存取環境變數 DOTNET_RUNNING_IN_CONTAINER :
bool inDocker = Environment.GetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER") == "true";
