Compartir a través de


Añadir soporte para contenedores

Puede agregar compatibilidad con contenedores de Docker en tipos de proyecto de Visual Studio compatibles, como ASP.NET proyectos web y otros. Consulte la información general sobre los tipos de proyecto admitidos en la versión de Visual Studio.

Puede agregar compatibilidad con contenedores de Docker o Podman en tipos de proyecto de Visual Studio compatibles, como ASP.NET proyectos web y otros. Consulte la información general sobre los tipos de proyecto admitidos en la versión de Visual Studio.

Prerrequisitos

Prerrequisitos

Agregar compatibilidad con contenedores al crear un proyecto

Puede habilitar la compatibilidad con contenedores durante la creación del proyecto seleccionando Habilitar compatibilidad con contenedores al crear un nuevo proyecto, como se muestra en la captura de pantalla siguiente:

Captura de pantalla que muestra cómo habilitar la compatibilidad con contenedores para la nueva aplicación web de ASP.NET Core en Visual Studio.

Nota:

En el caso de los proyectos de .NET Framework (no .NET Core), solo hay contenedores de Windows disponibles.

Nota:

Si usa la plantilla de proyecto de consola completa de .NET Framework, la opción admitida es Agregar compatibilidad con Container Orchestrator después de la creación del proyecto, con opciones para usar Service Fabric o Docker Compose. Agregar compatibilidad en la creación del proyecto y compatibilidad con Docker para un solo proyecto sin orquestación no son opciones disponibles.

Nota:

La compatibilidad con contenedores de .NET Framework se interrumpe en la versión actual de Visual Studio. Se admitieron contenedores de .NET Framework hasta Visual Studio 2022 17.14.

Adición de compatibilidad con contenedores a un proyecto existente

Para agregar compatibilidad con Docker a un proyecto existente, seleccione Agregar>compatibilidad con contenedores en el Explorador de soluciones. Los comandos Agregar > compatibilidad con contenedores y Agregar > compatibilidad con el Orquestador de contenedores se encuentran en el menú contextual del nodo del proyecto para un proyecto de ASP.NET Core en el Explorador de soluciones, como se muestra en la captura de pantalla siguiente.

Captura de pantalla que muestra la opción de menú Agregar compatibilidad con contenedores en Visual Studio.

Elija el tipo de compilación del contenedor y otras opciones.

Al agregar o habilitar la compatibilidad con contenedores en un proyecto de .NET 7 o posterior, Visual Studio muestra el cuadro de diálogo Opciones de Plantillas de Contenedor, que proporciona la elección del sistema operativo (Linux o Windows), pero también la capacidad de elegir el tipo de compilación de contenedor, Dockerfile o el SDK de .NET.

Puede especificar también la distribución de imágenes del contenedor y el contexto de compilación del contenedor.

Captura de pantalla del cuadro de diálogo Opciones de Infraestructura de Contenedor para agregar soporte para contenedores.

Container Image Distro especifica la imagen del sistema operativo que usan los contenedores como imagen base. Esta lista cambia si cambia entre Linux y Windows como tipo de contenedor.

Están disponibles las siguientes imágenes:

Windows:

  • Windows Nano Server (recomendado, solo disponible a partir de 8.0 en adelante, no preestablecido para proyectos de implementación anticipada (AOT) nativos)
  • Windows Server Core (solo disponible 8.0 y versiones posteriores)

linux:

  • Valor predeterminado (Debian, pero la etiqueta coincide con la versión de .NET de destino)
  • Debian
  • Ubuntu
  • Chiseled Ubuntu
  • Alpino

Nota:

Los contenedores basados en la imagen de Chiseled Ubuntu y que utilizan la compilación nativa anticipada (AOT) solo se pueden depurar en Modo Rápido. Consulte Personalización de contenedores de Docker en Visual Studio.

Container Build Context especifica la carpeta que se usa para docker build (o podman build). Consulte contexto de compilación de Docker o la compilación de Podman. El valor predeterminado es la carpeta de la solución, que se recomienda. Todos los archivos necesarios para una compilación deben estar en esta carpeta, que no es el caso si elige la carpeta del proyecto o alguna otra carpeta.

Tipo de compilación de contenedor dockerfile

Si elige el tipo de compilación del contenedor Dockerfile , Visual Studio agrega lo siguiente al proyecto:

  • un archivo Dockerfile
  • un .dockerignore archivo
  • Referencia de un paquete NuGet a Microsoft.VisualStudio.Azure.Containers.Tools.Targets

El Dockerfile que agregue será similar al código siguiente. En este ejemplo, el proyecto se denominaba WebApplication-Dockery eligió contenedores de Linux:

# See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081


# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["WebApplication15-AddContainerSupport/WebApplication15-AddContainerSupport.csproj", "WebApplication15-AddContainerSupport/"]
RUN dotnet restore "./WebApplication15-AddContainerSupport/WebApplication15-AddContainerSupport.csproj"
COPY . .
WORKDIR "/src/WebApplication15-AddContainerSupport"
RUN dotnet build "./WebApplication15-AddContainerSupport.csproj" -c $BUILD_CONFIGURATION -o /app/build

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./WebApplication15-AddContainerSupport.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication15-AddContainerSupport.dll"]

Tipo de compilación de contenedor del SDK de .NET

Puede usar la compatibilidad integrada del SDK de .NET para compilaciones de contenedores, lo que significa que no necesita un Dockerfile; consulte Containerize a .NET app with dotnet publish (Incluir en contenedores una aplicación de .NET con dotnet publish). En su lugar, configure los contenedores mediante propiedades de MSBuild en el archivo de proyecto y los valores para iniciar los contenedores con Visual Studio se codifican en un .json archivo de configuración, launchSettings.json.

Captura de pantalla que muestra el cuadro de diálogo Opciones de Container Scaffolding para agregar soporte para Docker con el SDK de .NET seleccionado como tipo de creación de contenedor.

Aquí, elija EL SDK de .NET como tipo de compilación de contenedor para usar la administración de contenedores del SDK de .NET en lugar de un Dockerfile.

Container Image Distro especifica la imagen del sistema operativo que usan los contenedores como imagen base. Esta lista cambia si cambia entre Linux y Windows como contenedor. Consulte la sección anterior para obtener una lista de imágenes disponibles.

La entrada de compilación del contenedor del SDK de .NET en launchSettings.json tiene el siguiente aspecto:

"Container (.NET SDK)": {
  "commandName": "SdkContainer",
  "launchBrowser": true,
  "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
  "environmentVariables": {
    "ASPNETCORE_HTTPS_PORTS": "8081",
    "ASPNETCORE_HTTP_PORTS": "8080"
  },
  "publishAllPorts": true,
  "useSSL": true
}

El SDK de .NET administra algunas de las opciones de configuración que se habrían codificado en un Dockerfile, como la imagen base del contenedor y las variables de entorno que se van a establecer. La configuración disponible en el archivo de proyecto para la configuración del contenedor se muestra en Personalización del contenedor. Por ejemplo, la distribución de imagen de contenedor se guarda en el archivo de proyecto como la ContainerBaseImage propiedad . Puede cambiarlo más adelante editando el archivo del proyecto.

<PropertyGroup>
    <ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>

Elija el tipo de compilación del contenedor y otras opciones.

Al agregar o habilitar soporte para Docker en un proyecto de .NET 7 o posterior, Visual Studio muestra el cuadro de diálogo Opciones de Andamiaje de Contenedor, que ofrece la elección del sistema operativo (Linux o Windows), pero también la capacidad de elegir el tipo de compilación de contenedor, Dockerfile o el SDK de .NET. Este cuadro de diálogo no aparece en proyectos de .NET Framework.

En la versión 17.11 y posteriores, también puede especificar la distro de imagen de contenedor y el contexto de compilación de Docker.

Captura de pantalla que muestra el cuadro de diálogo de Opciones de Scaffolding del contenedor para agregar compatibilidad con Docker.

Container Image Distro especifica la imagen del sistema operativo que usan los contenedores como imagen base. Esta lista cambia si cambia entre Linux y Windows como tipo de contenedor.

Están disponibles las siguientes imágenes:

Windows:

  • Windows Nano Server (recomendado, solo disponible a partir de 8.0 en adelante, no preestablecido para proyectos de implementación anticipada (AOT) nativos)
  • Windows Server Core (solo disponible 8.0 y versiones posteriores)

linux:

  • Valor predeterminado (Debian, pero la etiqueta es "8.0")
  • Debian
  • Ubuntu
  • Chiseled Ubuntu
  • Alpino

Nota:

Los contenedores basados en la imagen de Chiseled Ubuntu y que utilizan la compilación nativa anticipada (AOT) solo se pueden depurar en Modo Rápido. Consulte Personalización de contenedores de Docker en Visual Studio.

Contexto de compilación de Docker especifica la carpeta que se usa para la compilación de Docker. Consulte Contexto de compilación de Docker. El valor predeterminado es la carpeta de la solución, que se recomienda. Todos los archivos necesarios para una compilación deben estar en esta carpeta, que no es el caso si elige la carpeta del proyecto o alguna otra carpeta.

Tipo de compilación de contenedor dockerfile

Si elige el tipo de compilación del contenedor Dockerfile , Visual Studio agrega lo siguiente al proyecto:

  • un archivo Dockerfile
  • un .dockerignore archivo
  • Referencia de un paquete NuGet a Microsoft.VisualStudio.Azure.Containers.Tools.Targets

El Dockerfile que agregue será similar al código siguiente. En este ejemplo, el proyecto se denominaba WebApplication-Dockery eligió contenedores de Linux:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["WebApplication-Docker/WebApplication-Docker.csproj", "WebApplication-Docker/"]
RUN dotnet restore "WebApplication-Docker/WebApplication-Docker.csproj"
COPY . .
WORKDIR "/src/WebApplication-Docker"
RUN dotnet build "WebApplication-Docker.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication-Docker.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication-Docker.dll"]

Tipo de compilación de contenedor del SDK de .NET

Con Visual Studio 2022 17.9 y versiones posteriores con el SDK de .NET 7 instalados, en proyectos de ASP.NET Core que tienen como destino .NET 6 o posterior, tiene la opción de usar la compatibilidad integrada del SDK de .NET para compilaciones de contenedores, lo que significa que no necesita un Dockerfile; consulte Containerize a .NET app with dotnet publish (Incluir en contenedores una aplicación de .NET con dotnet publish). En su lugar, configure los contenedores mediante propiedades de MSBuild en el archivo de proyecto y los valores para iniciar los contenedores con Visual Studio se codifican en un .json archivo de configuración, launchSettings.json.

Captura de pantalla que muestra el cuadro de diálogo Opciones de Container Scaffolding para agregar soporte para Docker con el SDK de .NET seleccionado como tipo de creación de contenedor.

Aquí, elija EL SDK de .NET como tipo de compilación de contenedor para usar la administración de contenedores del SDK de .NET en lugar de un Dockerfile.

Container Image Distro especifica la imagen del sistema operativo que usan los contenedores como imagen base. Esta lista cambia si cambia entre Linux y Windows como contenedor. Consulte la sección anterior para obtener una lista de imágenes disponibles.

La entrada de compilación del contenedor del SDK de .NET en launchSettings.json tiene el siguiente aspecto:

"Container (.NET SDK)": {
  "commandName": "SdkContainer",
  "launchBrowser": true,
  "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
  "environmentVariables": {
    "ASPNETCORE_HTTPS_PORTS": "8081",
    "ASPNETCORE_HTTP_PORTS": "8080"
  },
  "publishAllPorts": true,
  "useSSL": true
}

El SDK de .NET administra algunas de las opciones de configuración que se habrían codificado en un Dockerfile, como la imagen base del contenedor y las variables de entorno que se van a establecer. La configuración disponible en el archivo de proyecto para la configuración del contenedor se muestra en Personalización del contenedor. Por ejemplo, la distribución de imagen de contenedor se guarda en el archivo de proyecto como la ContainerBaseImage propiedad . Puede cambiarlo más adelante editando el archivo del proyecto.

<PropertyGroup>
    <ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>

Pasos siguientes

Para obtener más información sobre la implementación de servicios y el uso de las herramientas de Visual Studio para trabajar con contenedores, lea los artículos siguientes:

Docker en Visual Studio

Depuración de aplicaciones en un contenedor local

Implementación de un contenedor de ASP.NET en un registro de contenedor mediante Visual Studio

Implementación en Azure App Service

Implementación en Azure Container Apps mediante Visual Studio