Поделиться через


Расширенный пример для контейнеров

Пример Dockerfile в Install Build Tools into a container всегда использует образ microsoft/dotnet-framework:4.8, основанный на последней версии образа microsoft/windowsservercore и последнем установщике средств сборки Visual Studio. Если вы опубликуете этот образ в реестр Docker , чтобы его могли загружать другие пользователи, этот образ может быть подходящим для многих сценариев. Тем не менее, на практике более часто следует указать, какой базовый образ вы используете, какие двоичные файлы вы загружаете и какие версии инструментов вы устанавливаете.

В следующем примере Dockerfile используется определенный тег версии образа microsoft/dotnet-framework. Использование определенного тега для базового образа является обычным и упрощает запоминание того, что сборка или перестроение изображений всегда имеет одинаковую основу.

Заметка

Вы не можете установить Visual Studio в microsoft/windowsservercore:10.0.14393.1593 или любой образ, основанный на нем, который имеет известные проблемы с запуском установщика в контейнере. Дополнительные сведения см. в разделе Известные проблемы для контейнеров.

В следующем примере скачиваются последние выпуски средств сборки. Если вы хотите использовать более раннюю версию средств сборки, которую можно установить в контейнер позже, сначала необходимо создать и поддерживать макет.

Установка скрипта

Чтобы собрать журналы при возникновении ошибки установки, создайте пакетный скрипт с именем "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 .

При необходимости передайте либо FROM_IMAGE, либо CHANNEL_URL, или оба аргумента с помощью ключа командной строки --build-arg, чтобы указать другой базовый образ или расположение внутреннего макета для поддержания фиксированного образа.

Совет

Список рабочих нагрузок и компонентов см. в каталоге компонентов 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. Если вы являетесь ИТ-администратором и у вас не установлен Visual Studio, вы можете отправить обратную связь для ИТ-администраторов.
  • Предложите функцию, отслеживайте проблемы с продуктом и найдите ответы в сообществе разработчиков Visual Studio.