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
- Docker Desktop
- Visual Studio 2019 con las cargas de trabajo Desarrollo web, Azure Tools o Desarrollo multiplataforma de .NET Core instaladas
- Herramientas de desarrollo de .NET Core para el desarrollo con .NET Core.
- Para publicar en Azure Container Registry, se necesita una suscripción de Azure. Regístrese para obtener una evaluación gratuita.
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
- Docker Desktop
- Visual Studio 2022 con las cargas de trabajo Desarrollo web, Azure Tools 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.
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:
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:
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-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"]
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.
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-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"]
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.
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.
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í:
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