Compartir a través de


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:

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

Captura de pantalla que muestra cómo habilitar la compatibilidad con Docker para la aplicación web de ASP.NET Core en 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:

Captura de pantalla que muestra cómo agregar la opción de menú de compatibilidad con Docker en Visual Studio.

Captura de pantalla que muestra cómo agregar la opción de menú de compatibilidad con Docker en 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. Este cuadro de diálogo no aparece en proyectos de .NET Framework ni en proyectos de Azure Functions.

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

Captura de pantalla que muestra el cuadro de diálogo Opciones de scaffolding de contenedor para añadir compatibilidad con Docker.

La Distribución de imagen de contenedor especifica la imagen del sistema operativo que usan los contenedores como imagen base. Esta lista cambia si cambia de tipo de contenedor entre Linux y Windows.

Están disponibles las siguientes imágenes:

Windows:

  • Windows Nano Server (recomendado, solo disponible la versión 8.0 y posteriores, no preestablecido para proyectos de implementación ahead-of-time (AOT) nativo)
  • Windows Server Core (solo está disponible la versión 8.0 y posteriores)

Linux:

  • Valor predeterminado (Debian, pero la etiqueta es "8.0")
  • Debian
  • Ubuntu
  • Ubuntu chiseled
  • Alpine

Nota:

Los contenedores basados en la imagen de Ubuntu chiseled y que usan la implementación nativa ahead-of-time (AOT) solo se pueden depurar en modo rápido. Vea Personalización de contenedores de Docker en Visual Studio.

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

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

Contenedorizar una aplicación .NET sin un Dockerfile

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.

Captura de pantalla que muestra el cuadro de diálogo Opciones de scaffolding de contenedor para agregar compatibilidad con Docker con el SDK de .NET seleccionado como tipo de compilació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.

La Distribución de imagen de contenedor especifica la imagen del sistema operativo que usan los contenedores como imagen base. Esta lista cambia si cambia de contenedor entre Linux y Windows. Vea 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 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 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 Personalizar el contenedor. Por ejemplo, la Distribución de imagen de contenedor se guarda en el archivo de proyecto como propiedad ContainerBaseImage. Puede cambiarlo más adelante editando el archivo de proyecto.

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

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.

Captura de pantalla de la ventana Contenedores.

Captura de pantalla de la ventana Contenedores.

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í:

Captura de pantalla de archivos de Docker en el Explorador de soluciones de Visual Studio.

Captura de pantalla de archivos de Docker en el Explorador de soluciones de 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