Inicio rápido: Docker en Visual Studio
Con Visual Studio, es muy fácil compilar, depurar y ejecutar aplicaciones ASP.NET Core en contenedores y publicarlas en Azure Container Registry, Docker Hub, Azure App Service o un registro de contenedor propio. En este artículo, publicaremos en Azure Container Registry.
Requisitos previos
- Docker Desktop
- Visual Studio 2017 con las cargas de trabajo Desarrollo web, Azure Tools o Desarrollo multiplataforma de .NET Core instaladas
- Para publicar en Azure Container Registry, una suscripción de Azure. Regístrese para obtener una evaluación gratuita.
Instalación y configuración
Para instalar Docker, primero revise la información de Docker Desktop for Windows: What to know before you install (Docker Desktop para Windows: información previa a la instalación). Después, instale Docker Desktop.
Agregar un proyecto a un contenedor de Docker
En el menú de Visual Studio, seleccione Archivo > Nuevo > Proyecto.
En la sección Plantillas del cuadro de diálogo Nuevo proyecto, seleccione Visual C# > Web.
Seleccione Aplicación web ASP.NET Core, o bien, si quiere usar .NET Framework en lugar de .NET Core, seleccione Aplicación web ASP.NET.
Asigne un nombre a la nueva aplicación (o utilice el predeterminado) y seleccione Aceptar.
Seleccione Aplicación web.
Marque la casilla Enable Docker Support (Habilitar compatibilidad con Docker).

En la captura de pantalla se muestra .NET Core; si usa .NET Framework, tendrá un aspecto distinto.
Seleccione el tipo de contenedor que quiera (Windows o Linux) y haga clic en Aceptar.
Información general sobre Dockerfile
Se agrega al proyecto un Dockerfile, la receta para crear una imagen de Docker final. Vea Dockerfile reference (Referencia de Dockerfile) para obtener una descripción de los comandos que contiene.
FROM mcr.microsoft.com/dotnet/aspnet:2.1 AS base
WORKDIR /app
EXPOSE 59518
EXPOSE 44364
FROM mcr.microsoft.com/dotnet/sdk:2.1 AS build
WORKDIR /src
COPY HelloDockerTools/HelloDockerTools.csproj HelloDockerTools/
RUN dotnet restore HelloDockerTools/HelloDockerTools.csproj
COPY . .
WORKDIR /src/HelloDockerTools
RUN dotnet build HelloDockerTools.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish HelloDockerTools.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "HelloDockerTools.dll"]
El elemento Dockerfile anterior se basa en la imagen microsoft/aspnetcore e incluye instrucciones para modificar la imagen base mediante la creación del proyecto y la adición al contenedor. Si usa .NET Framework, la imagen base será distinta.
Si la casilla Configurar para HTTPS del cuadro de diálogo del nuevo proyecto está marcada, el Dockerfile expondrá dos puertos. Uno se utiliza para el tráfico HTTP, mientras que el otro se emplea para HTTPS. Si la casilla no está marcada, se expondrá un único puerto (80) para el tráfico HTTP.
Depuración
Seleccione Docker en la lista desplegable de depuración de la barra de herramientas y empiece a depurar la aplicación. Es posible que vea un mensaje que pregunte sobre cómo confiar en un certificado; elija la opción de confiar en el certificado para continuar.
La ventana Resultados muestra las acciones que están teniendo lugar.
Abra la Consola del Administrador de paquetes (PMC) desde el menú Herramientas > Administrador de paquetes NuGet, Consola del Administrador de paquetes.
Seguidamente, se aplica la etiqueta dev a la imagen de Docker resultante de la aplicación. La imagen se basa en la etiqueta 2.1-aspnetcore-runtime de la imagen base microsoft/dotnet. Ejecute el comando docker images en la ventana Consola del Administrador de paquetes (PMC). Se muestran las imágenes en la máquina:
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodockertools dev d72ce0f1dfe7 30 seconds ago 255MB
microsoft/dotnet 2.1-aspnetcore-runtime fcc3887985bb 6 days ago 255MB
Nota
La imagen dev no contiene los archivos binarios de la aplicación ni otro contenido, ya que las configuraciones de Depurar usan el montaje de volumen para proporcionar la experiencia de depuración y edición iterativa. Para crear una imagen de producción que contenga todo el contenido, use la configuración de Liberar.
Ejecute el comando docker ps en la PMC. Tenga en cuenta que la aplicación se ejecuta mediante el contenedor:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
baf9a678c88d hellodockertools:dev "C:\\remote_debugge..." 21 seconds ago Up 19 seconds 0.0.0.0:37630->80/tcp dockercompose4642749010770307127_hellodockertools_1
Publicar imágenes de Docker
Una vez completado el ciclo de desarrollo y depuración de la aplicación, puede crear una imagen de producción de la aplicación.
Cambie la lista desplegable de configuración a Versión y compile la aplicación.
Haga clic con el botón derecho en el Explorador de soluciones y elija Publicar.
En el cuadro de diálogo de destino de publicación, seleccione la pestaña Container Registry.
Elija Crear una instancia de Azure Container Registry y haga clic en Publicar.
Rellene los valores deseados en el Create a new Azure Container Registry (Crear una nueva instancia de Azure Container Registry).
Parámetro Valor sugerido Descripción Prefijo de DNS Nombre único globalmente Nombre que identifica de forma única el nuevo registro de contenedor. Suscripción Elija una suscripción La suscripción de Azure que se va a usar. Grupo de recursos myResourceGroup Nombre del grupo de recursos en el que se va a crear el registro de contenedor. Elija Nuevo para crear un grupo de recursos nuevo. SKU Estándar Nivel de servicio del registro de contenedor Ubicación del registro Una ubicación cercana a usted Elija una ubicación en una región cercana a usted o a otros servicios que usarán el registro de contenedor. 
Haga clic en Crear
Pasos siguientes
Ahora puede extraer el contenedor del registro a cualquier host capaz de ejecutar imágenes de Docker, por ejemplo Azure Container Instances.
Con Visual Studio, puede compilar, depurar y ejecutar fácilmente aplicaciones .NET, ASP.NET y ASP.NET Core en contenedores y publicarlas en Azure Container Registry, Docker Hub, Azure App Service o en su propio registro de contenedor. En este artículo, publicaremos una aplicación ASP.NET Core en Azure Container Registry.
Requisitos previos
- 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, una suscripción de Azure. Regístrese para obtener una evaluación gratuita.
Instalación y configuración
Para instalar Docker, primero revise la información de Docker Desktop for Windows: What to know before you install (Docker Desktop para Windows: información previa a la instalación). Después, instale Docker Desktop.
Agregar un proyecto a un contenedor de Docker
Cree un proyecto con la plantilla Aplicación web ASP.NET Core, o bien, si quiere usar .NET Framework en lugar de .NET Core, elija Aplicación web ASP.NET (.NET Framework) .
En la pantalla Crear nueva aplicación web, asegúrese de que la casilla Habilitar compatibilidad con Docker está activada.

En la captura de pantalla se muestra .NET Core; si usa .NET Framework, tendrá un aspecto distinto.
Seleccione el tipo de contenedor que quiera (Windows o Linux) y haga clic en Crear.
Información general sobre Dockerfile
Se agrega al proyecto un Dockerfile, la receta para crear una imagen de Docker final. Vea Dockerfile reference (Referencia de Dockerfile) para obtener una descripción de los comandos que contiene.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
WORKDIR "/src/WebApplication1"
RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]
El elemento Dockerfile anterior se basa en la imagen microsoft/aspnetcore e incluye instrucciones para modificar la imagen base mediante la creación del proyecto y la adición al contenedor. Si usa .NET Framework, la imagen base será distinta.
Si la casilla Configurar para HTTPS del cuadro de diálogo del nuevo proyecto está marcada, el Dockerfile expondrá dos puertos. Uno se utiliza para el tráfico HTTP, mientras que el otro se emplea para HTTPS. Si la casilla no está marcada, se expondrá un único puerto (80) para el tráfico HTTP.
Depuración
Seleccione Docker en la lista desplegable de depuración de la barra de herramientas y empiece a depurar la aplicación. Es posible que vea un mensaje que pregunte sobre cómo confiar en un certificado; elija la opción de confiar en el certificado para continuar.
La opción Herramientas de contenedor de la ventana Salida muestra las acciones que están teniendo lugar. La primera vez, puede tardar unos minutos en descargar la imagen base, pero es mucho más rápido en ejecuciones posteriores.
Nota
Si necesita cambiar los puertos para la depuración, puede hacerlo en el archivo launchSettings.json. Vea Configuración de inicio de contenedor.
Ventana Contenedores
Si tiene la versión 16.4 u otra posterior de Visual Studio 2019, puede usar la ventana Contenedores para consultar los contenedores en ejecución en la máquina, así como las imágenes disponibles.
Abra la ventana Contenedores mediante el cuadro de búsqueda del IDE (Ctrl+Q), escriba container y elija la ventana Contenedores de la lista.
Puede colocar la ventana Contenedores en un lugar fácilmente accesible, como debajo del editor; para ello, muévala siguiendo las guías de colocación de ventanas.
En la ventana, busque el contenedor y recorra cada pestaña para ver las variables de entorno, las asignaciones de puertos, los registros y el sistema de archivos.

Para obtener más información, consulte Uso de la ventana Contenedores.
Publicar imágenes de Docker
Una vez completado el ciclo de desarrollo y depuración de la aplicación, puede crear una imagen de producción de la aplicación.
Cambie la lista desplegable de configuración a Versión y compile la aplicación.
Haga clic con el botón derecho en el Explorador de soluciones y elija Publicar.
En el cuadro de diálogo Publicar, seleccione la pestaña Container Registry para Docker.

Elija Crear Azure Container Registry.

Rellene los valores deseados en el Create a new Azure Container Registry (Crear una nueva instancia de Azure Container Registry).
Parámetro Valor sugerido Descripción Prefijo de DNS Nombre único globalmente Nombre que identifica de forma única el nuevo registro de contenedor. Suscripción Elija una suscripción La suscripción de Azure que se va a usar. Grupo de recursos myResourceGroup Nombre del grupo de recursos en el que se va a crear el registro de contenedor. Elija Nuevo para crear un grupo de recursos nuevo. SKU Estándar Nivel de servicio del registro de contenedor Ubicación del registro Una ubicación cercana a usted Elija una ubicación en una región cercana a usted o a otros servicios que usarán el registro de contenedor. 
Haga clic en Crear. En el cuadro de diálogo Publicar ahora se muestra el registro creado.

Elija Finalizar para completar el proceso de publicación de la imagen de contenedor en el registro recién creado en Azure.

Pasos siguientes
Ahora puede extraer el contenedor del registro a cualquier host capaz de ejecutar imágenes de Docker, por ejemplo Azure Container Instances.
Con Visual Studio, puede compilar, depurar y ejecutar fácilmente aplicaciones .NET, ASP.NET y ASP.NET Core en contenedores y publicarlas en Azure Container Registry, Docker Hub, Azure App Service o en su propio registro de contenedor. En este artículo, publicaremos una aplicación ASP.NET Core en Azure Container Registry.
Requisitos previos
- Docker Desktop
- Visual Studio 2022 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, una suscripción de Azure. Regístrese para obtener una evaluación gratuita.
Instalación y configuración
Para instalar Docker, primero revise la información de Docker Desktop for Windows: What to know before you install (Docker Desktop para Windows: información previa a la instalación). Después, instale Docker Desktop.
Agregar un proyecto a un contenedor de Docker
Cree un proyecto con la plantilla Aplicación web ASP.NET Core, o bien, si quiere usar .NET Framework en lugar de .NET Core, elija Aplicación web ASP.NET (.NET Framework) .
En la pantalla Crear nueva aplicación web, asegúrese de que la casilla Habilitar compatibilidad con Docker está activada.

En la captura de pantalla se muestra .NET.6.0; si usa .NET Framework, tendrá un aspecto distinto.
Seleccione el tipo de contenedor que quiera (Windows o Linux) y haga clic en Crear.
Información general sobre Dockerfile
Se agrega al proyecto un Dockerfile, la receta para crear una imagen de Docker final. Vea Dockerfile reference (Referencia de Dockerfile) para obtener una descripción de los comandos que contiene:
#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 ["WebApplication3/WebApplication3.csproj", "WebApplication3/"]
RUN dotnet restore "WebApplication3/WebApplication3.csproj"
COPY . .
WORKDIR "/src/WebApplication3"
RUN dotnet build "WebApplication3.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WebApplication3.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication3.dll"]
El elemento Dockerfile anterior se basa en la imagen .NET 6.0 del registro de contenedor de Microsoft (MCR) e incluye instrucciones para modificar la imagen base mediante la creación del proyecto y la adición al contenedor. Si usa .NET Framework, la imagen base será distinta.
Si la casilla Configurar para HTTPS del cuadro de diálogo del nuevo proyecto está marcada, el Dockerfile expondrá dos puertos. Uno se utiliza para el tráfico HTTP, mientras que el otro se emplea para HTTPS. Si la casilla no está marcada, se expondrá un único puerto (80) para el tráfico HTTP.
Depuración
Seleccione Docker en la lista desplegable de depuración de la barra de herramientas y empiece a depurar la aplicación. Es posible que vea un mensaje que pregunte sobre cómo confiar en un certificado; elija la opción de confiar en el certificado para continuar.
La opción Herramientas de contenedor de la ventana Salida muestra las acciones que están teniendo lugar. La primera vez, puede tardar unos minutos en descargar la imagen base, pero es mucho más rápido en ejecuciones posteriores.
Después de la creación, aparece el explorador y se muestra la página principal de la aplicación. En la barra de direcciones del explorador, puede ver la dirección URL del host local y el número de puerto para la depuración.
Nota
Si necesita cambiar los puertos para la depuración, puede hacerlo en el archivo launchSettings.json. Vea Configuración de inicio de contenedor.
Ventana Contenedores
Puede usar la ventana Contenedores para consultar los contenedores en ejecución en la máquina, así como las imágenes disponibles.
Abra la ventana Contenedores mediante el cuadro de búsqueda del IDE (Ctrl+Q), escriba container y elija la ventana Contenedores de la lista.
Puede colocar la ventana Contenedores en un lugar fácilmente accesible, como debajo del editor; para ello, muévala siguiendo las guías de colocación de ventanas.
En la ventana, busque el contenedor y recorra cada pestaña para ver las variables de entorno, las asignaciones de puertos, los registros y el sistema de archivos.

Para obtener más información, consulte Uso de la ventana Contenedores.
Publicar imágenes de Docker
Una vez completado el ciclo de desarrollo y depuración de la aplicación, puede crear una imagen de producción de la aplicación.
Cambie la lista desplegable de configuración a Versión y compile la aplicación.
Haga clic con el botón derecho en el Explorador de soluciones y elija Publicar.
En el cuadro de diálogo Publicar, seleccione la pestaña Container Registry para Docker.

Elija Crear Azure Container Registry.

Rellene los valores deseados en el Create a new Azure Container Registry (Crear una nueva instancia de Azure Container Registry).
Parámetro Valor sugerido Descripción Prefijo de DNS Nombre único globalmente Nombre que identifica de forma única el nuevo registro de contenedor. Suscripción Elija una suscripción La suscripción de Azure que se va a usar. Grupo de recursos myResourceGroup Nombre del grupo de recursos en el que se va a crear el registro de contenedor. Elija Nuevo para crear un grupo de recursos nuevo. SKU Estándar Nivel de servicio del registro de contenedor Ubicación del registro Una ubicación cercana a usted Elija una ubicación en una región cercana a usted o a otros servicios que usarán el registro de contenedor. 
Haga clic en Crear. En el cuadro de diálogo Publicar ahora se muestra el registro creado.

Elija Finalizar para completar el proceso de publicación de la imagen de contenedor en el registro recién creado en Azure.
Pasos siguientes
Ahora puede extraer el contenedor del registro a cualquier host capaz de ejecutar imágenes de Docker, por ejemplo Azure Container Instances.
Recursos adicionales
- Desarrollo de contenedores con Visual Studio
- Troubleshoot Visual Studio development with Docker (Solución de problemas de desarrollo de Visual Studio con Docker)
- Visual Studio Container Tools GitHub repository (Repositorio de GitHub de herramientas de contenedor de Visual Studio)