docker 指令紀錄 in 2025

Docker 指令紀錄 in 2025, for NET8, React and ASP.NET Core 專案部署紀錄。

引言

這只是一份紀錄。無法泛用。留參。

此例是用在部署 NET8 React in ASP.NET Web App 到 Docker Desktop。

此例部署到 Docker Desktop 是 HTTP 模式。若要支援 HTTPS 需再加入 TLS/SSL 憑證與相關組態。

開發環境

  • IDE: Visual Studio 2022

  • 平台: NET8

  • 框架: React in ASP.NET Core (TypeScript)

  • 部署目標: Docker Desktop (linux containger)

部署程序

因為一些原因打算在本地端編譯後再上傳到 Docker。正常來說 CI/CD 都是在 Docker 端執行。

O、前置工作

  • 備好一份可成功編譯與執行的專案。

  • 安裝 Docker Desktop。

  • ...

一、手動發佈專案。

先手動發行專案到 _publish 目錄。

設定如下圖:

二、執行 docker CI 指令

加入 Dockerfile 並填寫組態。

Dockerfile
# 使用官方的 ASP.NET Core 執行階段作為基礎映像
FROM mcr.microsoft.com/dotnet/aspnet:8.0

# 在容器內建立一個工作目錄
WORKDIR /app

# 將 _publish 目錄中的所有檔案複製到容器的 /app 目錄中
# - 前置工作:先手動發行專案到 `_publish` 目錄。
# - ※此例在前置工作就編譯完成。此步驟只是複製到 docker image。
COPY ["_publish/", "."]

# 公開容器的 8080 連接埠,讓外部可以存取
EXPOSE 8080

# 設定容器啟動時執行的命令
# 這裡假設您的啟動專案是 AuctionHouseApp.Server.dll
ENTRYPOINT ["dotnet", "AuctionHouseApp.Server.dll"]

執行 docker CI 指令。

# (CI)
# build (此例 build 只是複製檔案到 docker)
# - 將依組態檔 `Dockerfile` 進行 build。
docker build -t auctionhouseapp .
docker build -t <your-webapp-image-name> <source_folder>

三、執行 docker CD 指令

打算透過 docker.env 參數檔喂參數。先填好參數檔。

docker.env
# Docker 環境專用的設定檔

# ASP.NET Core 會自動將 : 轉換為階層
ConnectionStrings:AUCDB=Server=host.docker.internal,1433;Database=AuctionDB;User Id=sa;Password=*******;Encrypt=false
ConnectionStrings:YourDB=Server=host.docker.internal,1433;Database=YourDbName;User Id=sa;Password=*******;Encrypt=false

# 您也可以在這裡加入或覆寫其他設定,例如:
# Logging:LogLevel:Default="Information"
# SomeOtherKey="SomeValue"

再執行 docker CD 指令。

# (CD) 
# 啟動並依 ./docker.env 參數啟動(以虛網啟動)
# - 其中 -p 38080:8080 --- 轉換內部虛網 port 8080 → 外部 port 38080
# - 其中 --env-file 指向環境參數檔。會取代 appsetting.json 對應的參數。也可用 `-e ...` 語法替換。
docker run -d -p 38080:8080 --name auctionhouse-container --env-file ./docker.env auctionhouseapp
docker run -d -p 38080:8080 --name <your-webapp-container-name> --env-file ./docker.env <your-webapp-image-name>

四、若成功的話在 browser 開啟你的 Web App。

沒圖沒真象

順便整理指令

(先這樣)

Last updated