從命令行開始建置容器專案
如果要在 Visual Studio 外部使用 Dockerfile 建置容器專案,可以使用 docker build
、MSBuild
、dotnet build
或 dotnet publish
從命令列建置。
使用 .NET SDK 建置類型時,由於缺少 Dockerfile,因此無法使用 docker build
;請改用 MSBuild
、dotnet build
或 dotnet 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 專案所建立的 Dockerfile (以及以 Visual Studio 2017 Update 4 之前的 Visual Studio 版本建立的 .NET Core 專案) 不是多階段 Dockerfile。 這些 Dockerfile 中的步驟不會編譯您的程式碼。 而是在 Visual Studio 建置 .NET Framework Dockerfile 時,先使用 MSBuild 編譯您的專案。 成功時,Visual Studio 會接著建置 Dockerfile,這只會將 MSBuild 的建置輸出複製到產生的 Docker 映像。 由於編譯程式碼的步驟並未包含在 Dockerfile 中,因此您無法從命令列使用 docker build
建置 .NET Framework Dockerfile。 您應該使用 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 取得建置記錄。