共用方式為


在 Docker 容器中執行 ASP.NET Core 應用程式

注意

這不是這篇文章的最新版本。 如需目前版本,請參閱本文的 .NET 8 版本

警告

不再支援此版本的 ASP.NET Core。 如需詳細資訊,請參閱 .NET 和 .NET Core 支援原則。 如需目前版本,請參閱本文的 .NET 8 版本

重要

這些發行前產品的相關資訊在產品正式發行前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。

如需目前版本,請參閱本文的 .NET 8 版本

本文示範如何在 Docker 容器中執行 ASP.NET Core 應用程式。

Windows Home 版本不支援 Hyper-V,而 Docker 需要 Hyper-V。

如需使用 dotnet publish 將 .NET 應用程式容器化的相關資訊,請參閱使用 dotnet publish 將 .NET 應用程式容器化

ASP.NET Core Docker 映像

針對本教學課程,您可以下載 ASP.NET Core 範例應用程式,並在 Docker 容器中執行它。 該範例可與 Linux 或 Windows 容器搭配使用。

範例 Dockerfile 會使用 Docker 多階段建置功能 \(英文\),在不同容器中建置並執行。 建置和執行容器會從 Docker Hub 中 Microsoft 所提供的映像來建置:

  • dotnet/sdk

    範例會使用此映像來建置應用程式。 此映像包含隨附命令列工具 (CLI) 的 .NET SDK。 此映像會最佳化來進行本機開發、偵錯和單元測試。 為了開發和編譯而安裝的工具會使此映像成為相對較大的檔案。

  • dotnet/aspnet

    範例會使用此映像來執行應用程式。 此映像包含 ASP.NET Core 執行階段和程式庫,並會進行最佳化,以在生產環境中執行應用程式。 專為部署和應用程式啟動速度而設計的映像相對較小,因此,已將從 Docker 登錄到 Docker 主機的網路效能最佳化。 只會將執行應用程式所需的程式庫和內容複製到容器中。 內容已準備好執行,可用最短的時間從 docker run 到應用程式啟動。 在 Docker 模型中,不需要動態程式碼編譯。

必要條件

下載範例應用程式

在本機執行應用程式

  • 瀏覽至 dotnet-docker/samples/aspnetapp/aspnetapp 中的專案資料夾。

  • 執行下列命令,在本機建置並執行應用程式:

    dotnet run
    
  • 在瀏覽器中移至 http://localhost:<port> 以測試應用程式。

  • 在命令提示字元中按 Ctrl + C 以停止應用程式。

在 Linux 容器或 Windows 容器中執行

  • 若要在 Linux 容器中執行,請以滑鼠右鍵按一下系統匣的 Docker 用戶端圖示,然後選取 [切換至 Linux 容器]。

  • 若要在 Windows 容器中執行,請以滑鼠右鍵按一下系統匣的 Docker 用戶端圖示,然後選取 [切換至 Windows 容器]。

  • 瀏覽至 dotnet-docker/samples/aspnetapp 中的 Dockerfile 資料夾。

  • 執行下列命令,在 Docker 中建置並執行範例:

    docker build -t aspnetapp .
    docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetapp
    

    build 命令引數:

    • 將映像命名為 aspnetapp。
    • 在目前的資料夾 (結束期間) 中尋找 Dockerfile。

    run 命令引數:

    • 配置虛擬 TTY,即使未連接,還是要使其保持開啟 (與 --interactive --tty 的效果相同)。
    • 結束時自動移除容器。
    • 將本機電腦上的 <port> 對應至容器中的連接埠 8080。
    • 將容器命名為 aspnetcore_sample。
    • 指定 aspnetapp 映像。
  • 在瀏覽器中移至 http://localhost:<port> 以測試應用程式。

手動建置並部署

在某些情況下,您可能想藉由複製執行階段所需的應用程式資產,將應用程式部署至容器。 本節示範如何手動部署。

  • 瀏覽至 dotnet-docker/samples/aspnetapp/aspnetapp 中的專案資料夾。

  • 執行 dotnet publish 命令:

    dotnet publish -c Release -o published
    

    命令引數:

    • 以發行模式建置應用程式 (預設為偵錯模式)。
    • 在 [published] 資料夾中建立資產。
  • 執行應用程式。

    • Windows:

      dotnet published\aspnetapp.dll
      
    • Linux:

      dotnet published/aspnetapp.dll
      
  • 瀏覽至 http://localhost:<port> 以查看 home 頁面。

若要在 Docker 容器內使用手動發佈的應用程式,請建立新的 Dockerfile 並使用 docker build . 命令來建置映像。

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

若要查看新的映像,請使用 docker images 命令。

Dockerfile

以下是您先前執行的 docker build 命令所使用的 Dockerfile。 它會以您在本節所做的相同方式,使用 dotnet publish 進行建置及部署。

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

在上面的 Dockerfile 中,檔案 *.csproj 會複製並還原為不同的層級docker build 命令建置映像時,會使用內建快取。 如果 *.csproj 檔案自上次執行 docker build 命令後未曾變更,則 dotnet restore 命令就不需再次執行。 相對地,會重複使用對應 dotnet restore 層的內建快取。 如需詳細資訊,請參閱撰寫 Dockerfile 的最佳做法

其他資源

下一步

包含範例應用程式的 Git 存放庫也會包含文件。 如需存放庫中可用資源的概觀,請參閱讀我檔案 \(英文\)。 特別是了解如何實作 HTTPS:

ASP.NET Core Docker 映像

針對本教學課程,您可以下載 ASP.NET Core 範例應用程式,並在 Docker 容器中執行它。 該範例可與 Linux 或 Windows 容器搭配使用。

範例 Dockerfile 會使用 Docker 多階段建置功能 \(英文\),在不同容器中建置並執行。 建置和執行容器會從 Docker Hub 中 Microsoft 所提供的映像來建置:

  • dotnet/sdk

    範例會使用此映像來建置應用程式。 此映像包含隨附命令列工具 (CLI) 的 .NET SDK。 此映像會最佳化來進行本機開發、偵錯和單元測試。 為了開發和編譯而安裝的工具會使此映像成為相對較大的檔案。

  • dotnet/aspnet

    範例會使用此映像來執行應用程式。 此映像包含 ASP.NET Core 執行階段和程式庫,並會進行最佳化,以在生產環境中執行應用程式。 專為部署和應用程式啟動速度而設計的映像相對較小,因此,已將從 Docker 登錄到 Docker 主機的網路效能最佳化。 只會將執行應用程式所需的程式庫和內容複製到容器中。 內容已準備好執行,可用最短的時間從 docker run 到應用程式啟動。 在 Docker 模型中,不需要動態程式碼編譯。

必要條件

下載範例應用程式

在本機執行應用程式

  • 瀏覽至 dotnet-docker/samples/aspnetapp/aspnetapp 中的專案資料夾。

  • 執行下列命令,在本機建置並執行應用程式:

    dotnet run
    
  • 在瀏覽器中移至 http://localhost:5000 以測試應用程式。

  • 在命令提示字元中按 Ctrl + C 以停止應用程式。

在 Linux 容器或 Windows 容器中執行

  • 若要在 Linux 容器中執行,請以滑鼠右鍵按一下系統匣的 Docker 用戶端圖示,然後選取 [切換至 Linux 容器]。

  • 若要在 Windows 容器中執行,請以滑鼠右鍵按一下系統匣的 Docker 用戶端圖示,然後選取 [切換至 Windows 容器]。

  • 瀏覽至 dotnet-docker/samples/aspnetapp 中的 Dockerfile 資料夾。

  • 執行下列命令,在 Docker 中建置並執行範例:

    docker build -t aspnetapp .
    docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
    

    build 命令引數:

    • 將映像命名為 aspnetapp。
    • 在目前的資料夾 (結束期間) 中尋找 Dockerfile。

    run 命令引數:

    • 配置虛擬 TTY,即使未連接,還是要使其保持開啟 (與 --interactive --tty 的效果相同)。
    • 結束時自動移除容器。
    • 將本機電腦上的連接埠 5000 對應至容器中的連接埠 80。
    • 將容器命名為 aspnetcore_sample。
    • 指定 aspnetapp 映像。
  • 在瀏覽器中移至 http://localhost:5000 以測試應用程式。

手動建置並部署

在某些情況下,您可能想藉由複製執行階段所需的應用程式資產,將應用程式部署至容器。 本節示範如何手動部署。

  • 瀏覽至 dotnet-docker/samples/aspnetapp/aspnetapp 中的專案資料夾。

  • 執行 dotnet publish 命令:

    dotnet publish -c Release -o published
    

    命令引數:

    • 以發行模式建置應用程式 (預設為偵錯模式)。
    • 在 [published] 資料夾中建立資產。
  • 執行應用程式。

    • Windows:

      dotnet published\aspnetapp.dll
      
    • Linux:

      dotnet published/aspnetapp.dll
      
  • 瀏覽至 http://localhost:5000 以查看 home 頁面。

若要在 Docker 容器內使用手動發佈的應用程式,請建立新的 Dockerfile 並使用 docker build . 命令來建置映像。

FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

若要查看新的映像,請使用 docker images 命令。

Dockerfile

以下是您先前執行的 docker build 命令所使用的 Dockerfile。 它會以您在本節所做的相同方式,使用 dotnet publish 進行建置及部署。

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

在上面的 Dockerfile 中,檔案 *.csproj 會複製並還原為不同的層級docker build 命令建置映像時,會使用內建快取。 如果 *.csproj 檔案自上次執行 docker build 命令後未曾變更,則 dotnet restore 命令就不需再次執行。 相對地,會重複使用對應 dotnet restore 層的內建快取。 如需詳細資訊,請參閱撰寫 Dockerfile 的最佳做法

其他資源

下一步

包含範例應用程式的 Git 存放庫也會包含文件。 如需存放庫中可用資源的概觀,請參閱讀我檔案 \(英文\)。 特別是了解如何實作 HTTPS:

ASP.NET Core Docker 映像

針對本教學課程,您可以下載 ASP.NET Core 範例應用程式,並在 Docker 容器中執行它。 該範例可與 Linux 或 Windows 容器搭配使用。

範例 Dockerfile 會使用 Docker 多階段建置功能 \(英文\),在不同容器中建置並執行。 建置和執行容器會從 Docker Hub 中 Microsoft 所提供的映像來建置:

  • dotnet/sdk

    範例會使用此映像來建置應用程式。 此映像包含隨附命令列工具 (CLI) 的 .NET SDK。 此映像會最佳化來進行本機開發、偵錯和單元測試。 為了開發和編譯而安裝的工具會使此映像成為相對較大的檔案。

  • dotnet/core/sdk

    範例會使用此映像來建置應用程式。 此映像包含隨附命令列工具 (CLI) 的 .NET Core SDK。 此映像會最佳化來進行本機開發、偵錯和單元測試。 為了開發和編譯而安裝的工具會使此映像成為相對較大的檔案。

  • dotnet/aspnet

    範例會使用此映像來執行應用程式。 此映像包含 ASP.NET Core 執行階段和程式庫,並會進行最佳化,以在生產環境中執行應用程式。 專為部署和應用程式啟動速度而設計的映像相對較小,因此,已將從 Docker 登錄到 Docker 主機的網路效能最佳化。 只會將執行應用程式所需的程式庫和內容複製到容器中。 內容已準備好執行,可用最短的時間從 docker run 到應用程式啟動。 在 Docker 模型中,不需要動態程式碼編譯。

  • dotnet/core/aspnet

    範例會使用此映像來執行應用程式。 此映像包含 ASP.NET Core 執行階段和程式庫,並會進行最佳化,以在生產環境中執行應用程式。 專為部署和應用程式啟動速度而設計的映像相對較小,因此,已將從 Docker 登錄到 Docker 主機的網路效能最佳化。 只會將執行應用程式所需的程式庫和內容複製到容器中。 內容已準備好執行,可用最短的時間從 docker run 到應用程式啟動。 在 Docker 模型中,不需要動態程式碼編譯。

必要條件

下載範例應用程式

在本機執行應用程式

  • 瀏覽至 dotnet-docker/samples/aspnetapp/aspnetapp 中的專案資料夾。

  • 執行下列命令,在本機建置並執行應用程式:

    dotnet run
    
  • 在瀏覽器中移至 http://localhost:5000 以測試應用程式。

  • 在命令提示字元中按 Ctrl + C 以停止應用程式。

在 Linux 容器或 Windows 容器中執行

  • 若要在 Linux 容器中執行,請以滑鼠右鍵按一下系統匣的 Docker 用戶端圖示,然後選取 [切換至 Linux 容器]。

  • 若要在 Windows 容器中執行,請以滑鼠右鍵按一下系統匣的 Docker 用戶端圖示,然後選取 [切換至 Windows 容器]。

  • 瀏覽至 dotnet-docker/samples/aspnetapp 中的 Dockerfile 資料夾。

  • 執行下列命令,在 Docker 中建置並執行範例:

    docker build -t aspnetapp .
    docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
    

    build 命令引數:

    • 將映像命名為 aspnetapp。
    • 在目前的資料夾 (結束期間) 中尋找 Dockerfile。

    run 命令引數:

    • 配置虛擬 TTY,即使未連接,還是要使其保持開啟 (與 --interactive --tty 的效果相同)。
    • 結束時自動移除容器。
    • 將本機電腦上的連接埠 5000 對應至容器中的連接埠 80。
    • 將容器命名為 aspnetcore_sample。
    • 指定 aspnetapp 映像。
  • 在瀏覽器中移至 http://localhost:5000 以測試應用程式。

手動建置並部署

在某些情況下,您可能想藉由複製執行階段所需的應用程式資產,將應用程式部署至容器。 本節示範如何手動部署。

  • 瀏覽至 dotnet-docker/samples/aspnetapp/aspnetapp 中的專案資料夾。

  • 執行 dotnet publish 命令:

    dotnet publish -c Release -o published
    

    命令引數:

    • 以發行模式建置應用程式 (預設為偵錯模式)。
    • 在 [published] 資料夾中建立資產。
  • 執行應用程式。

    • Windows:

      dotnet published\aspnetapp.dll
      
    • Linux:

      dotnet published/aspnetapp.dll
      
  • 瀏覽至 http://localhost:5000 以查看 home 頁面。

若要在 Docker 容器內使用手動發佈的應用程式,請建立新的 Dockerfile 並使用 docker build . 命令來建置映像。

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

若要查看新的映像,請使用 docker images 命令。

Dockerfile

以下是您先前執行的 docker build 命令所使用的 Dockerfile。 它會以您在本節所做的相同方式,使用 dotnet publish 進行建置及部署。

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

若要查看新的映像,請使用 docker images 命令。

Dockerfile

以下是您先前執行的 docker build 命令所使用的 Dockerfile。 它會以您在本節所做的相同方式,使用 dotnet publish 進行建置及部署。

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

在上面的 Dockerfile 中,檔案 *.csproj 會複製並還原為不同的層級docker build 命令建置映像時,會使用內建快取。 如果 *.csproj 檔案自上次執行 docker build 命令後未曾變更,則 dotnet restore 命令就不需再次執行。 相對地,會重複使用對應 dotnet restore 層的內建快取。 如需詳細資訊,請參閱撰寫 Dockerfile 的最佳做法

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Dockerfile

以下是您先前執行的 docker build 命令所使用的 Dockerfile。 它會以您在本節所做的相同方式,使用 dotnet publish 進行建置及部署。

FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

如上面的 Dockerfile 所顯示,檔案 *.csproj 會複製並還原為不同的層級docker build 命令建置映像時,會使用內建快取。 如果 *.csproj 檔案自上次執行 docker build 命令後未曾變更,則 dotnet restore 命令就不需再次執行。 相對地,會重複使用對應 dotnet restore 層的內建快取。 如需詳細資訊,請參閱撰寫 Dockerfile 的最佳做法

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Dockerfile

以下是您先前執行的 docker build 命令所使用的 Dockerfile。 它會以您在本節所做的相同方式,使用 dotnet publish 進行建置及部署。

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

在上面的 Dockerfile 中,檔案 *.csproj 會複製並還原為不同的層級docker build 命令建置映像時,會使用內建快取。 如果 *.csproj 檔案自上次執行 docker build 命令後未曾變更,則 dotnet restore 命令就不需再次執行。 相對地,會重複使用對應 dotnet restore 層的內建快取。 如需詳細資訊,請參閱撰寫 Dockerfile 的最佳做法

其他資源

下一步

包含範例應用程式的 Git 存放庫也會包含文件。 如需存放庫中可用資源的概觀,請參閱讀我檔案 \(英文\)。 特別是了解如何實作 HTTPS: