Compartir vía


Herramientas de contenedor de Visual Studio para Docker

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

Prerrequisitos

Compatibilidad con Docker en Visual Studio

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

La compatibilidad con Docker en Visual Studio ha cambiado en 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 proyecto admitidos, si solo quiere un contenedor para un solo proyecto, sin usar la orquestación, puede hacerlo agregando compatibilidad con Docker. El siguiente nivel es la compatibilidad con la orquestación de contenedores, que agrega los archivos de soporte técnico adecuados para el orquestador concreto 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. Una vez creado un proyecto de aplicación de consola de .NET Core, está disponible la opción Agregar compatibilidad con Docker. Los proyectos de aplicación de consola de .NET Framework no admiten la opción Agregar 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.

En la versión 16.4 y posteriores de Visual Studio 2019, la ventana Contenedores está disponible, lo que le permite ver contenedores en ejecución, examinar imágenes disponibles, ver variables de entorno, registros y asignaciones de puertos, inspeccionar el sistema de archivos, adjuntar un depurador o abrir una ventana de terminal dentro del entorno de contenedor. Consulte Uso de la ventana Contenedores.

Prerrequisitos

Compatibilidad con Docker en Visual Studio

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

La compatibilidad con Docker en Visual Studio ha cambiado en 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 proyecto admitidos, si solo quiere un contenedor para un solo proyecto, sin usar la orquestación, puede hacerlo agregando compatibilidad con Docker. El siguiente nivel es la compatibilidad con la orquestación de contenedores, que agrega los archivos de soporte técnico adecuados para el orquestador concreto 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 posterior, tiene dos tipos de compilación de contenedor entre los que elegir 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 proporcionada por 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 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 al crear un proyecto y agregar compatibilidad con Docker para un solo proyecto sin orquestación no son opciones disponibles.

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

Nota

Los requisitos de licencia de Docker pueden ser diferentes para diferentes versiones de Docker Desktop. Consulte la documentación de Docker para comprender los requisitos actuales del licenciamiento de su versión de Docker Desktop para el desarrollo en su situación.

Adición de compatibilidad con Docker

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

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

Captura de pantalla en la que se muestra cómo habilitar la compatibilidad con Docker 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.

Para agregar compatibilidad con Docker a un proyecto existente, seleccione Agregar>compatibilidad con Docker en 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ú Compatibilidad con Docker en Visual Studio.

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

Adición de 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 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: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"]

Añadir soporte para 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 de opciones de andamiaje de contenedores para agregar compatibilidad con Docker.

Distribución de Imagen de contenedor especifica qué imagen del sistema operativo 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 en 8.0 y versiones posteriores, no preestablecido para proyectos de compilación nativa anticipada (AOT))
  • Windows Server Core (solo disponible 8.0 y versiones posteriores)

Linux:

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

Nota

Los contenedores basados en la imagen de Ubuntu cincelada y que usan implementació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 el 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, que normalmente no es el caso si 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 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: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"]

Incluir en contenedores una aplicación .NET sin un Dockerfile

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. 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 de .json, launchSettings.json.

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

Aquí, elija 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.

Distribución de Imagen de contenedor especifica qué imagen del sistema operativo 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 propiedad ContainerBaseImage. Puede cambiarlo más adelante editando el archivo del proyecto.

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

Uso de la ventana Contenedores

La ventana Contenedores le permite ver contenedores e imágenes en su máquina y ver lo que sucede con ellos. Puede ver el sistema de archivos, los volúmenes montados, las variables de entorno, los puertos usados y 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 en algún lugar. Debido al ancho de la ventana, funciona mejor cuando se ancla en la parte inferior de la pantalla.

Seleccione un contenedor y use las pestañas para ver la información que está disponible. Para comprobarlo, ejecute la aplicación habilitada para Docker, abra la pestaña Archivos y expanda la carpeta de la aplicación para 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 Utilice la ventana Contenedores.

Compatibilidad con Docker Compose

Cuando quiera crear una solución de varios contenedores mediante Docker Compose, agregue compatibilidad con el orquestador de contenedores a los proyectos. Esto le permite 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 para el orquestador de contenedores mediante Docker Compose, haga clic con el botón derecho en el nodo del proyecto en Explorador de solucionesy elija Agregar > Compatibilidad con orquestador de contenedores. A continuación, elija de Docker Compose para administrar los contenedores.

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

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

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

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

Repita el proceso con los demás proyectos que desea controlar mediante Docker Compose.

Si trabaja con un gran número de servicios, puede ahorrar tiempo y recursos informáticos seleccionando el subconjunto de servicios que desea iniciar en su sesión de depuración. 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 para Azure Service Fabric, ejecutar y depurar localmente e implementar en Azure.

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

Para obtener un tutorial detallado, consulte Tutorial: Implementación de una aplicación .NET en 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 automatizada y continua y la entrega de cambios en el código de servicio y la configuración. Para comenzar, consulte Cree su primera canalización.

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

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 de Docker local

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

Implementación de Azure App Service

Implementación en Azure Container Apps mediante Visual Studio