共用方式為


從命令行建置容器專案

如果您想要在 Visual Studio 外部使用 Dockerfile 建置容器專案,您可以使用 docker buildMSBuilddotnet builddotnet publish,從命令行建置。

如果您使用 .NET SDK 組建類型,則沒有 Dockerfile,因此您無法使用 docker build;請改用 MSBuilddotnet builddotnet publish,在命令行上建置。

使用 Docker 組建

若要從命令行建置容器化方案,您通常可以為方案中的每個專案使用命令 docker build <context>。 您提供了 建置內容 參數。 Dockerfile 的 建置上下文 是本地電腦上用來當作生成映像檔工作資料夾的資料夾。 例如,當您複製到容器時,就是從中複製檔案的資料夾。 在 .NET Core 專案中,預設值是使用包含方案檔的資料夾(.sln)。 以相對路徑表示,這個參數通常是 “..”,適用於專案資料夾中的 Dockerfile,以及父資料夾中的方案檔。 對於 .NET Framework 專案,預設建置內容是項目資料夾,而不是方案資料夾。

docker build -f Dockerfile ..

您可以藉由設定 DockerfileContext 屬性,在專案檔中設定建置內容。 例如

<PropertyGroup>
   <DockerfileContext>contextfolder</DockerfileContext>
</PropertyGroup>

Dockerfile 中的相對路徑相對於建置內容,因此,如果您變更內容,請務必據以更新相對路徑。

使用 Visual Studio 17.11 和更新版本,當您將 Docker 支援新增至專案時,您可以指定組建內容的資料夾。 如果您想要變更組建內容,您可以刪除 Dockerfile(如果沒有您想要保留的其他變更),然後重新執行 新增 Docker 支援,這次指定新的組建內容。 新的 Dockerfile 將會更新相對路徑,以對應到新的建置環境。

使用 MSBuild

注意

本節說明當您選擇 Dockerfile 容器組建類型時,如何自定義 Docker 容器。 如果您使用 .NET SDK 組建類型,自定義選項會有所不同,而且本文中的資訊不適用。 相反地,請參閱使用 dotnet publish 將 .NET 應用程式容器化

Visual Studio 針對 .NET Framework 專案所建立的 Dockerfiles,以及使用 Visual Studio 2017 Update 4 之前版本所建立的 .NET Core 專案的 Dockerfiles,並不是多階段 Dockerfiles。 這些 Dockerfiles 中的步驟不會編譯您的程式代碼。 相反地,當 Visual Studio 建置 .NET Framework Dockerfile 時,它會先使用 MSBuild 編譯您的專案。 當成功時,Visual Studio 會接著建置 Dockerfile,這隻會將 MSBuild 的組建輸出複製到產生的 Docker 映像。 由於編譯程式代碼的步驟不包含在 Dockerfile 中,因此您無法使用命令行中的 docker build 建置 .NET Framework Dockerfiles。 您應該使用 MSBuild 來建置這些專案。

若要建置單一 Docker 容器專案的映像,您可以使用 MSBuild 搭配 /t:ContainerBuild 命令選項。 這個指令會指示 MSBuild 建置目標 ContainerBuild,而不是預設目標 Build。 例如:

MSBuild MyProject.csproj /t:ContainerBuild /p:Configuration=Release

當您從 Visual Studio IDE 建置解決方案時,您會看到類似您在 [輸出] 視窗中看到的輸出。 一律使用 /p:Configuration=Release,因為在Visual Studio使用多階段建置優化的情況下,建置 偵錯 組態時的結果可能不會如預期般運作。 請參閱 自定義容器映射以進行偵錯

如果您使用 Docker Compose 專案,請使用此命令來建置映射:

msbuild /p:SolutionPath=<solution-name>.sln /p:Configuration=Release docker-compose.dcproj

若要檢視 MSBuild 記錄,請參閱使用 MSBuild 取得建置記錄