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

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

  1. En el menú de Visual Studio, seleccione Archivo > Nuevo > Proyecto.

  2. En la sección Plantillas del cuadro de diálogo Nuevo proyecto, seleccione Visual C# > Web.

  3. 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.

  4. Asigne un nombre a la nueva aplicación (o utilice el predeterminado) y seleccione Aceptar.

  5. Seleccione Aplicación web.

  6. Marque la casilla Enable Docker Support (Habilitar compatibilidad con Docker).

    Captura de pantalla de la casilla Habilitar compatibilidad con Docker.

    En la captura de pantalla se muestra .NET Core; si usa .NET Framework, tendrá un aspecto distinto.

  7. 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.

  1. Cambie la lista desplegable de configuración a Versión y compile la aplicación.

  2. Haga clic con el botón derecho en el Explorador de soluciones y elija Publicar.

  3. En el cuadro de diálogo de destino de publicación, seleccione la pestaña Container Registry.

  4. Elija Crear una instancia de Azure Container Registry y haga clic en Publicar.

  5. 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.

    Captura de pantalla del cuadro de diálogo Crear Azure Container Registry de Visual Studio.

  6. 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

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

  1. 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) .

  2. En la pantalla Crear nueva aplicación web, asegúrese de que la casilla Habilitar compatibilidad con Docker está activada.

    Captura de pantalla de la casilla Habilitar compatibilidad con Docker.

    En la captura de pantalla se muestra .NET Core; si usa .NET Framework, tendrá un aspecto distinto.

  3. 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.

Captura de pantalla de la ventana Contenedores.

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.

  1. Cambie la lista desplegable de configuración a Versión y compile la aplicación.

  2. Haga clic con el botón derecho en el Explorador de soluciones y elija Publicar.

  3. En el cuadro de diálogo Publicar, seleccione la pestaña Container Registry para Docker.

    Captura de pantalla del cuadro de diálogo Publicar - Elegir Container Registry para Docker.

  4. Elija Crear Azure Container Registry.

    Captura de pantalla del cuadro de diálogo Publicar - Elegir Crear Azure Container Registry.

  5. 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.

    Captura de pantalla del cuadro de diálogo Crear Azure Container Registry de Visual Studio.

  6. Haga clic en Crear. En el cuadro de diálogo Publicar ahora se muestra el registro creado.

    Captura de pantalla del cuadro de diálogo Publicar que muestra Azure Container Registry creado.

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

    Captura de pantalla que muestra la publicación correcta.

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

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

  1. 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) .

  2. En la pantalla Crear nueva aplicación web, asegúrese de que la casilla Habilitar compatibilidad con Docker está activada.

    Captura de pantalla de la casilla Habilitar compatibilidad con Docker.

    En la captura de pantalla se muestra .NET.6.0; si usa .NET Framework, tendrá un aspecto distinto.

  3. 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.

Captura de pantalla de la ventana Contenedores.

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.

  1. Cambie la lista desplegable de configuración a Versión y compile la aplicación.

  2. Haga clic con el botón derecho en el Explorador de soluciones y elija Publicar.

  3. En el cuadro de diálogo Publicar, seleccione la pestaña Container Registry para Docker.

    Captura de pantalla del cuadro de diálogo Publicar - Elegir Container Registry para Docker.

  4. Elija Crear Azure Container Registry.

    Captura de pantalla del cuadro de diálogo Publicar - Elegir Crear Azure Container Registry.

  5. 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.

    Captura de pantalla del cuadro de diálogo Crear Azure Container Registry de Visual Studio.

  6. Haga clic en Crear. En el cuadro de diálogo Publicar ahora se muestra el registro creado.

    Captura de pantalla del cuadro de diálogo Publicar que muestra Azure Container Registry creado.

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

    Captura de pantalla que muestra la publicación correcta.

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