Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
- Docker Desktop
- Visual Studio con las cargas de trabajo desarrollo de ASP.NET y web, desarrollo de Azure y/o desarrollo de escritorio de .NET instaladas.
- Para publicar en Azure Container Registry, se necesita una suscripción de Azure. Regístrese para obtener una evaluación gratuita.
Prerrequisitos
- Docker Desktop o Podman Desktop.
- Visual Studio o para la compatibilidad con Podman, Visual Studio 2026, con la carga de trabajo desarrollo web y ASP.NET, la carga de trabajo desarrollo de Azure, y/o la carga de trabajo desarrollo de escritorio de .NET instalada.
- Para publicar en Azure Container Registry, se necesita una suscripción de Azure. Regístrese para obtener una evaluación gratuita.
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:
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.
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.
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
.dockerignorearchivo - 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.
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.
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
.dockerignorearchivo - 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.
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:
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