容器的進階範例
將建置工具安裝至容器中之範例 Dockerfile 一律使用根據最新 microsoft/windowsservercore 映像的 microsoft/dotnet-framework:4.8 映像,和最新的 Visual Studio Build Tools 安裝程式。 如果您將此映像發佈到 Docker 登錄以供其他人提取,此映像在許多情況下可能沒問題。 不過,實際上較常見的做法是指定您使用的基底映像、您下載的二進位檔及您安裝的工具版本。
下列範例 Dockerfile 使用 microsoft/dotnet-framework 映像的特定版本標記。 使用基底映像的特定標記很常見,很容易就記住建立或重建映像一律會有相同的基礎。
注意
您無法將 Visual Studio 安裝到 microsoft/windowsservercore:10.0.14393.1593 或以它為基礎的任何映像,此版本已知在容器中啟動安裝程式時會發生問題。 如需詳細資訊,請參閱容器的已知問題。
下列範例會下載最新版的 Build Tools。 如果您希望使用較舊版本的 Build Tools 並稍後再安裝至容器,您必須先建立和維護配置。
安裝指令碼
若要在發生安裝錯誤時收集記錄檔,請在工作目錄中建立名為 "Install.cmd" 的批次指令碼,且包含下列內容:
@if not defined _echo echo off
setlocal enabledelayedexpansion
call %*
if "%ERRORLEVEL%"=="3010" (
exit /b 0
) else (
if not "%ERRORLEVEL%"=="0" (
set ERR=%ERRORLEVEL%
call C:\TEMP\collect.exe -zip:C:\vslogs.zip
exit /b !ERR!
)
)
exit /b 0
Dockerfile
在工作目錄中,建立具有下列內容的 Dockerfile:
# escape=`
# Use a specific tagged image. Tags can be changed, though that is unlikely for most images.
# You could also use the immutable tag @sha256:324e9ab7262331ebb16a4100d0fb1cfb804395a766e3bb1806c62989d1fc1326
ARG FROM_IMAGE=mcr.microsoft.com/windows/servercore:ltsc2019
FROM ${FROM_IMAGE}
# Restore the default Windows shell for correct batch processing.
SHELL ["cmd", "/S", "/C"]
# Copy our Install script.
COPY Install.cmd C:\TEMP\
# Download collect.exe in case of an install failure.
ADD https://aka.ms/vscollect.exe C:\TEMP\collect.exe
# Use the latest release channel. For more control, specify the location of an internal layout.
ARG CHANNEL_URL=https://aka.ms/vs/16/release/channel
ADD ${CHANNEL_URL} C:\TEMP\VisualStudio.chman
RUN `
# Download the Build Tools bootstrapper.
curl -SL --output vs_buildtools.exe https://aka.ms/vs/16/release/vs_buildtools.exe `
`
# Install Build Tools with the Microsoft.VisualStudio.Workload.AzureBuildTools workload, excluding workloads and components with known issues.
&& (call C:\TEMP\Install.cmd vs_buildtools.exe --quiet --wait --norestart --nocache install `
--installPath "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools" `
--channelUri C:\TEMP\VisualStudio.chman `
--installChannelUri C:\TEMP\VisualStudio.chman `
--add Microsoft.VisualStudio.Workload.AzureBuildTools `
--remove Microsoft.VisualStudio.Component.Windows10SDK.10240 `
--remove Microsoft.VisualStudio.Component.Windows10SDK.10586 `
--remove Microsoft.VisualStudio.Component.Windows10SDK.14393 `
--remove Microsoft.VisualStudio.Component.Windows81SDK) `
`
# Cleanup
&& del /q vs_buildtools.exe
# Define the entry point for the Docker container.
# This entry point starts the developer command prompt and launches the PowerShell shell.
ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]
# escape=`
# Use the latest Windows Server Core 2019 image.
ARG FROM_IMAGE=mcr.microsoft.com/windows/servercore:ltsc2019
FROM ${FROM_IMAGE}
# Restore the default Windows shell for correct batch processing.
SHELL ["cmd", "/S", "/C"]
# Copy our Install script.
COPY Install.cmd C:\TEMP\
# Download collect.exe in case of an install failure.
ADD https://aka.ms/vscollect.exe C:\TEMP\collect.exe
# Use the latest release channel. For more control, specify the location of an internal layout.
ARG CHANNEL_URL=https://aka.ms/vs/17/release/channel
ADD ${CHANNEL_URL} C:\TEMP\VisualStudio.chman
RUN `
# Download the Build Tools bootstrapper.
curl -SL --output vs_buildtools.exe https://aka.ms/vs/17/release/vs_buildtools.exe `
`
# Install Build Tools with the Microsoft.VisualStudio.Workload.AzureBuildTools workload, excluding workloads and components with known issues.
&& (call C:\TEMP\Install.cmd vs_buildtools.exe --quiet --wait --norestart --nocache install `
--installPath "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools" `
--channelUri C:\TEMP\VisualStudio.chman `
--installChannelUri C:\TEMP\VisualStudio.chman `
--add Microsoft.VisualStudio.Workload.AzureBuildTools `
--remove Microsoft.VisualStudio.Component.Windows10SDK.10240 `
--remove Microsoft.VisualStudio.Component.Windows10SDK.10586 `
--remove Microsoft.VisualStudio.Component.Windows10SDK.14393 `
--remove Microsoft.VisualStudio.Component.Windows81SDK) `
`
# Cleanup
&& del /q vs_buildtools.exe
# Define the entry point for the Docker container.
# This entry point starts the developer command prompt and launches the PowerShell shell.
ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]
執行下列命令,在目前工作目錄中建置映像:
docker build -t buildtools2019:16.0.28714.193 -t buildtools2019:latest -m 2GB .
docker build -t buildtools2022:17.0 -t buildtools2022:latest -m 2GB .
選擇性地使用 --build-arg
命令列參數傳遞 FROM_IMAGE
或 CHANNEL_URL
引數中的任一者或兩者都傳遞,以指定不同的基底映像或內部配置的位置,以維護固定的映像。
提示
如需工作負載和元件的清單,請參閱 Visual Studio Build Tools 元件目錄。
診斷安裝失敗
此範例會下載特定工具,並驗證雜湊相符。 它也會下載最新的 Visual Studio 和 .NET 記錄收集公用程式,因此如果確實發生安裝失敗,您可以將記錄複製到主機電腦以分析失敗。
> docker build -t buildtools2019:16.0.28714.193 -t buildtools2019:latest -m 2GB .
Sending build context to Docker daemon
...
Step 8/10 : RUN C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe --quiet --wait --norestart --nocache ...
---> Running in 4b62b4ce3a3c
The command 'cmd /S /C C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe ...' returned a non-zero code: 1603
> docker cp 4b62b4ce3a3c:C:\vslogs.zip "%TEMP%\vslogs.zip"
> docker build -t buildtools2022:17.0 -t buildtools2022:latest -m 2GB .
Sending build context to Docker daemon
...
Step 8/10 : RUN C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe --quiet --wait --norestart --nocache ...
---> Running in 4b62b4ce3a3c
The command 'cmd /S /C C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe ...' returned a non-zero code: 1603
> docker cp 4b62b4ce3a3c:C:\vslogs.zip "%TEMP%\vslogs.zip"
最後一行完成執行之後,開啟您電腦上的 "%TEMP%\vslogs.zip",或在開發人員社群網站上提交問題。
支援或疑難排解
有時可能會發生一些問題。 若 Visual Studio 安裝失敗,請參閱針對 Visual Studio 安裝和升級問題進行疑難排解,以取得逐步指導方針。
以下是一些支援選項:
- 我們也提供安裝聊天 (僅限英文) 支援選項,可回答安裝的相關問題。
- 您可以透過 Visual Studio 安裝程式及 Visual Studio IDE 中的回報問題工具回報產品的問題。 如果您是 IT 系統管理員且未安裝 Visual Studio,您可以在這裡提交 IT 系統管理員意見反應。
- 在 Visual Studio 開發人員社群 \(英文\) 中建議功能、追蹤產品問題和尋找解答。