Herramientas de contenedor de Visual Studio para Docker

Las herramientas incluidas en Visual Studio para el desarrollo con contenedores de Docker son fáciles de usar y simplifican en gran medida la compilación, la depuración y la implementación de aplicaciones contenedorizadas. Puede trabajar con un contenedor en un único proyecto o usar la orquestación de contenedores con Docker Compose o Service Fabric para trabajar con varios servicios en contenedores.

Requisitos previos

Compatibilidad con Docker en Visual Studio

La compatibilidad con Docker está disponible para proyectos ASP.NET, proyectos ASP.NET Core y proyectos de consola de .NET Core y .NET Framework.

La compatibilidad con Docker en Visual Studio ha cambiado a lo largo de una serie de versiones en respuesta a las necesidades del cliente. Hay dos niveles de compatibilidad con Docker que puede agregar a un proyecto, y las opciones admitidas varían según el tipo de proyecto y la versión de Visual Studio. Con algunos tipos de proyectos admitidos, si simplemente quiere un contenedor para un único proyecto, sin usar la orquestación, puede hacerlo si agrega compatibilidad con Docker. El siguiente nivel es la compatibilidad con la orquestación de contenedores, que agrega los archivos de compatibilidad adecuados para el orquestador determinado que elija.

Con Visual Studio 2019, puede usar Docker Compose, Kubernetes y Service Fabric como servicios de orquestación de contenedores.

Nota

Al crear un proyecto de consola de .NET Framework o .NET Core, no hay ninguna opción para agregar compatibilidad con Docker. Después de crear un proyecto de aplicación de consola de .NET Core, la opción Adición de compatibilidad con Docker está disponible. Los proyectos de aplicación de consola de .NET Framework no admiten la opción Adición de compatibilidad con Docker después de crear el proyecto. Después de la creación de los proyectos de consola de .NET Framework o .NET Core, se admite la opción Agregar compatibilidad con el orquestador de contenedores mediante Service Fabric o Docker Compose.

Las versiones 16.4 y posteriores de Visual Studio 2019 incluyen la ventana Contenedores, en la que puede ver los contenedores en ejecución, examinar las imágenes disponibles, ver las variables de entorno, los registros y las asignaciones de puertos, inspeccionar el sistema de archivos, adjuntar un depurador o abrir una ventana de terminal dentro del entorno de un contenedor. Consulte Uso de la ventana Contenedores.

Requisitos previos

Compatibilidad con Docker en Visual Studio

La compatibilidad con Docker está disponible para proyectos ASP.NET, proyectos ASP.NET Core y proyectos de consola de .NET Core y .NET Framework.

La compatibilidad con Docker en Visual Studio ha cambiado a lo largo de una serie de versiones en respuesta a las necesidades del cliente. Hay varias opciones para agregar compatibilidad con Docker a un proyecto y las opciones admitidas varían según el tipo de proyecto y la versión de Visual Studio. Con algunos tipos de proyectos admitidos, si simplemente quiere un contenedor para un único proyecto, sin usar la orquestación, puede hacerlo si agrega compatibilidad con Docker. El siguiente nivel es la compatibilidad con la orquestación de contenedores, que agrega los archivos de compatibilidad adecuados para el orquestador determinado que elija.

Con Visual Studio 2022 versión 17.9 y versiones posteriores, al agregar compatibilidad con Docker a un proyecto de .NET 7 o versiones posteriores, se puede elegir entre dos tipos de compilación de contenedores para agregar compatibilidad con Docker. Puede optar por agregar un Dockerfile para especificar cómo compilar las imágenes de contenedor, o puede optar por usar la compatibilidad integrada con contenedores que proporciona el SDK de .NET.

Además, con Visual Studio 2022 y versiones posteriores, al elegir la orquestación de contenedores, puede usar Docker Compose o Service Fabric como servicios de orquestación de contenedores.

Nota:

Si va a usar la plantilla completa del proyecto de consola de .NET Framework, la opción admitida es Agregar compatibilidad con el orquestador de contenedores después de la creación del proyecto, con opciones para usar Service Fabric o Docker Compose. La adición de compatibilidad durante la creación del proyecto y la adición de compatibilidad con Docker para un único proyecto sin orquestación no son opciones disponibles.

En Visual Studio 2022 se incluye la ventana Contenedores, en la que puede ver los contenedores en ejecución, examinar las imágenes disponibles, ver las variables de entorno, los registros y las asignaciones de puertos, inspeccionar el sistema de archivos, adjuntar un depurador o abrir una ventana de terminal dentro del entorno de un contenedor. Consulte Uso de la ventana Contenedores.

Nota

Los requisitos de licencia de Docker pueden ser diferentes para las distintas versiones de Docker Desktop. Consulte la documentación de Docker a fin de comprender los requisitos de licencia actuales para el uso de la versión de Docker Desktop para el desarrollo en su caso.

Adición de compatibilidad con Docker

Puede habilitar la compatibilidad con Docker durante la creación del proyecto si selecciona Enable Docker Support (Habilitar la compatibilidad con Docker) al crear un proyecto, como se muestra en la captura de pantalla siguiente:

Screenshot showing how to enable Docker Support for new ASP.NET Core web app in Visual Studio.

Screenshot showing how to enable Docker Support for new ASP.NET Core web app in Visual Studio.

Nota:

Para los proyectos de .NET Framework (no incluye .NET Core), solo están disponibles los contenedores de Windows.

Puede agregar compatibilidad con Docker a un proyecto existente si selecciona Agregar>Compatibilidad con Docker en el Explorador de soluciones. Los comandos Agregar > Compatibilidad con Docker y Agregar > Compatibilidad con el orquestador de contenedores se encuentran en el menú contextual del nodo de proyecto de un proyecto de ASP.NET Core en el Explorador de soluciones, como se muestra en la captura de pantalla siguiente:

Screenshot showing how to add Docker Support menu option in Visual Studio.

Screenshot showing how to add Docker Support menu option in Visual Studio.

Agregue compatibilidad con Docker

Al agregar o habilitar la compatibilidad con Docker, Visual Studio agrega lo siguiente al proyecto:

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

El Dockerfile que agregue se parecerá al código a continuación. En este ejemplo, el proyecto se denominó WebApplication-Docker y 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:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:3.1 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"]

Agregar compatibilidad con Docker mediante el tipo de compilación de contenedor Dockerfile

Al agregar o habilitar la compatibilidad con Docker en un proyecto de .NET 7 o versiones posteriores, Visual Studio muestra el cuadro de diálogo Opciones de scaffolding de contenedor, que permite elegir el sistema operativo (Linux o Windows), pero también el tipo de compilación del contenedor, ya sea Dockerfile o SDK de .NET.

Si elige Dockerfile, Visual Studio agrega lo siguiente al proyecto:

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

El Dockerfile que agregue se parecerá al código a continuación. En este ejemplo, el proyecto se denominó WebApplication-Docker y 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:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.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"]

Agregar compatibilidad con Docker mediante la opción SDK de .NET

Con Visual Studio 2022 17.9 y versiones posteriores con el SDK de .NET 7 instalado, en los proyectos de ASP.NET Core que tienen como destino .NET 6 o versiones posteriores, tiene la opción de usar la compatibilidad integrada del SDK de .NET para compilaciones de contenedor, lo que significa que no necesita un Dockerfile; consulte Inclusión de una aplicación de .NET en un contenedor mediante 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 archivo de configuración .json, launchSettings.json.

Screenshot showing the Container Scaffolding Options dialog for adding Docker support.

La entrada de compilación del contenedor del SDK de .NET en launchSettings.json se parece al siguiente código:

"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 que se habrían codificado en un Dockerfile, como la imagen base del contenedor que se elige para que coincida con la versión de destino de .NET 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 Personalizar el contenedor.

Uso de la ventana Contenedores

En la ventana Contenedores puede consultar los contenedores y las imágenes en la máquina, además de lo que sucede con ellos. Puede ver el sistema de archivos, los volúmenes montados, las variables de entorno y los puertos usados, además de examinar los archivos de registro.

Use el inicio rápido (Ctrl+Q) y escriba containers para abrir la ventana Contenedores. Puede usar los controles de acoplamiento para colocar la ventana donde desee. Debido al ancho de la ventana, funciona mejor cuando se acopla en la parte inferior de la pantalla.

Seleccione un contenedor y use las pestañas para ver la información disponible. Para comprobarlo, ejecute la aplicación habilitada para Docker, abra la pestaña Archivos y expanda la carpeta de aplicaciones a fin de ver la aplicación implementada en el contenedor.

Screenshot of Containers window.

Screenshot of Containers window.

Para obtener más información, consulte Uso de la ventana Contenedores.

Compatibilidad con Docker Compose

Si quiere crear una solución de varios contenedores mediante Docker Compose, agregue compatibilidad con el orquestador de contenedores a los proyectos. De esta manera podrá ejecutar y depurar un grupo de contenedores (una solución completa o un grupo de proyectos) al mismo tiempo si se definen en el mismo archivo docker-compose.yml.

Para agregar compatibilidad con el orquestador de contenedores mediante Docker Compose, haga clic con el botón derecho en el nodo del proyecto en el Explorador de soluciones y elija Agregar > Container Orchestrator Support (Compatibilidad con el orquestador de contenedores). A continuación, elija Docker Compose para administrar los contenedores.

Después de agregar compatibilidad con el orquestador de contenedores al proyecto, verá que se ha agregado un Dockerfile al proyecto (si aún no había uno) y una carpeta docker-compose a la solución en el Explorador de soluciones, como se muestra aquí:

Screenshot of Docker files in Solution Explorer in Visual Studio.

Screenshot of Docker files in Solution Explorer in Visual Studio.

Si docker-compose.yml ya existe, Visual Studio le agrega simplemente las líneas de código de configuración necesarias.

Repita el proceso con los otros proyectos que quiera controlar mediante Docker Compose.

Si trabaja con un gran número de servicios, puede seleccionar el subconjunto de servicios que quiere iniciar en la sesión de depuración para ahorrar tiempo y recursos informáticos. Consulte Administración de perfiles de inicio para Docker Compose.

Nota:

Tenga en cuenta que los hosts remotos de Docker no se admiten en las herramientas de Visual Studio.

Compatibilidad con Service Fabric

Con las herramientas de Service Fabric en Visual Studio, puede desarrollar y depurar en Azure Service Fabric, ejecutar y depurar localmente e implementar en Azure.

Visual Studio 2019 y versiones posteriores admiten el desarrollo de microservicios en contenedores mediante contenedores de Windows y la orquestación de Service Fabric.

Para ver un tutorial detallado, consulte Tutorial: Implementación de una aplicación .NET de un contenedor de Windows en Azure Service Fabric.

Para más información sobre Azure Service Fabric, consulte Service Fabric.

Entrega continua e integración continua (CI/CD)

Visual Studio se integra fácilmente con Azure Pipelines para la integración continua y automatizada y la entrega de cambios en el código y la configuración del servicio. Para comenzar, consulte Create your first pipeline (Creación de su primera canalización).

Para Service Fabric, consulte Tutorial: Implementación de la aplicación de ASP.NET Core en Azure Service Fabric mediante Azure DevOps Projects.

Pasos siguientes

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

Depuración de aplicaciones en un contenedor de Docker local

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