Contoh tingkat lanjut untuk kontainer

Contoh Dockerfile di Instal Build Tools ke dalam kontainer selalu menggunakan gambar microsoft/dotnet-framework:4.8 berdasarkan gambar microsoft/windowsservercore terbaru dan alat penginstal Alat Build Visual Studio terbaru. Jika Anda menerbitkan gambar ini ke registri Docker untuk ditarik orang lain, gambar ini mungkin baik-baik saja untuk banyak skenario. Namun, dalam praktiknya lebih umum untuk spesifik tentang gambar dasar apa yang Anda gunakan, biner apa yang Anda unduh, dan versi alat mana yang Anda instal.

Contoh dockerfile berikut menggunakan tag versi tertentu dari gambar microsoft/dotnet-framework. Menggunakan tag tertentu untuk gambar dasar adalah hal yang biasa dan memudahkan untuk mengingat bahwa membangun atau membangun kembali gambar selalu memiliki dasar yang sama.

Catatan

Anda tidak dapat menginstal Visual Studio ke microsoft/windowsservercore:10.0.14393.1593 atau gambar apa pun berdasarkannya, yang memiliki masalah yang diketahui saat meluncurkan alat penginstal dalam kontainer. Untuk informasi selengkapnya, lihat Masalah umum untuk kontainer.

Contoh berikut mengunduh rilis terbaru Build Tools. Jika Anda ingin menggunakan versi Build Tools yang lebih lama yang dapat Anda instal ke dalam kontainer nanti, Anda harus terlebih dahulu membuat dan memelihara tata letak.

Menginstal skrip

Untuk mengumpulkan log saat terjadi kesalahan penginstalan, buat skrip batch yang bernama "Install.cmd" di direktori kerja yang menyertakan konten berikut:

@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

Di direktori kerja, buat "Dockerfile" dengan konten berikut:

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

Jalankan perintah berikut untuk membangun gambar di direktori kerja saat ini:

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

Secara opsional meneruskan atau kedua FROM_IMAGE argumen CHANNEL_URL menggunakan --build-arg sakelar baris perintah untuk menentukan gambar dasar yang berbeda atau lokasi tata letak internal untuk mempertahankan gambar tetap.

Tip

Untuk daftar beban kerja dan komponen, lihat direktori komponen Alat Build Visual Studio.

Mendiagnosis kegagalan penginstalan

Contoh ini mengunduh alat tertentu dan memvalidasi bahwa hash cocok. Ini juga mengunduh utilitas pengumpulan log Visual Studio dan .NET terbaru sehingga jika kegagalan penginstalan terjadi, Anda dapat menyalin log ke komputer host Anda untuk menganalisis kegagalan.

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

Setelah baris terakhir selesai dieksekusi, buka "%TEMP%\vslogs.zip" di komputer Anda, atau kirimkan masalah di situs web Komunitas Pengembang.

Dukungan atau pemecahan masalah

Kadang-kadang, hal-hal bisa salah. Jika penginstalan Visual Studio Anda gagal, lihat Memecahkan masalah penginstalan dan peningkatan Visual Studio untuk panduan langkah demi langkah.

Berikut adalah beberapa opsi dukungan lainnya:

  • Kami menawarkan opsi dukungan obrolan penginstalan (hanya bahasa Inggris) untuk masalah terkait penginstalan.
  • Laporkan masalah produk kepada kami melalui alat Laporkan Masalah yang muncul baik di Penginstal Visual Studio maupun di Ide Visual Studio. Jika Anda adalah Administrator TI dan belum menginstal Visual Studio, Anda dapat mengirimkan umpan balik Admin TI di sini.
  • Sarankan fitur, lacak masalah produk, dan temukan jawaban di Komunitas Pengembang Visual Studio.