Delen via


Geavanceerd voorbeeld voor containers

Het voorbeeld-Dockerfile in Installatie van Build Tools in een container maakt altijd gebruik van de microsoft/dotnet-framework:4.8 image op basis van de meest recente microsoft/windowsservercore image en het nieuwste installatieprogramma voor Visual Studio Build Tools. Als u deze installatiekopie publiceert naar een Docker-register zodat anderen deze kunnen ophalen, is deze installatiekopie mogelijk in orde voor veel scenario's. In de praktijk is het echter gebruikelijker om specifiek te zijn over welke basisinstallatiekopieën u gebruikt, welke binaire bestanden u downloadt en welke hulpprogrammaversies u installeert.

In het volgende voorbeeld-Dockerfile wordt gebruik gemaakt van een specifieke versietag van de microsoft/dotnet-framework-afbeelding. Het gebruik van een specifieke tag voor een basisimage is gebruikelijk en maakt het eenvoudig om te onthouden dat het bouwen of herbouwen van images altijd dezelfde basis heeft.

Notitie

U kunt Visual Studio niet installeren in Microsoft/windowsservercore:10.0.14393.1593 of een installatiekopieën die erop zijn gebaseerd. Dit heeft bekende problemen bij het starten van het installatieprogramma in een container. Zie Bekende problemen voor containersvoor meer informatie.

In het volgende voorbeeld wordt de nieuwste versie van Build Tools gedownload. Als u een eerdere versie van Build Tools wilt gebruiken die u later in een container kunt installeren, moet u eerst maken en een indeling onderhouden.

Script installeren

Als u logboeken wilt verzamelen wanneer er een installatiefout optreedt, maakt u een batchscript met de naam 'Install.cmd' in de werkmap met de volgende inhoud:

@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

Maak in de werkmap het Dockerfile met de volgende inhoud:

# 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"]

Voer de volgende opdracht uit om de image te bouwen in de huidige werkdirectory:

docker build -t buildtools2022:17.0 -t buildtools2022:latest -m 2GB .

Geef desgewenst een of beide FROM_IMAGE of CHANNEL_URL argumenten door met behulp van de --build-arg opdrachtregeloptie om een andere basisinstallatiekopie of de locatie van een interne indeling op te geven om een vaste installatiekopie te behouden.

Fooi

Zie de map met onderdelen van Visual Studio Build Toolsvoor een lijst met workloads en onderdelen.

Installatiefouten diagnosticeren

In dit voorbeeld worden specifieke hulpprogramma's gedownload en wordt gevalideerd of de hashes overeenkomen. Ook worden de meest recente hulpprogramma's voor Visual Studio en .NET-logboekverzameling gedownload, zodat u de logboeken naar uw hostcomputer kunt kopiëren als er een installatiefout optreedt om de fout te analyseren.

> 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"

Nadat de laatste regel is voltooid, opent u '%TEMP%\vslogs.zip' op uw computer of verzendt u een probleem op de Developer Community-website.

Ondersteuning of probleemoplossing

Soms kan het fout gaan. Als de installatie van Visual Studio mislukt, raadpleegt u Problemen met de installatie en upgrade van Visual Studio oplossen voor stapsgewijze instructies.

Hier volgen nog enkele ondersteuningsopties:

  • Gebruik de installatiechat (alleen Engelstalig) voor installatieproblemen.
  • Meld productproblemen aan ons met behulp van het hulpprogramma Een probleem melden dat wordt weergegeven in het visual studio-installatieprogramma en in de Visual Studio IDE. Als u een IT-beheerder bent en Visual Studio niet hebt geïnstalleerd, kunt u feedback verzenden IT-beheerder.
  • Een functie voorstellen, productproblemen bijhouden en antwoorden vinden in de Visual Studio Developer Community.