Inicio rápido: Docker en Visual Studio

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 Container Registry. 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, 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á activada, se expone 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: elija Crear un nuevo 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 Container Registry. En este artículo, publicará 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. Antes de crear el proyecto de Visual Studio, asegúrese de que Docker Desktop ejecuta el tipo de contenedores (Windows o Linux) que pretende usar en el proyecto de Visual Studio.

    Para cambiar el tipo de contenedor usado por Docker Desktop, haga clic con el botón derecho en el icono de Docker (la ballena) en la barra de tareas y elija Cambiar a contenedores de Linux o Cambiar a contenedores de Windows.

    Advertencia

    Si cambia el tipo de contenedor después de crear el proyecto de Visual Studio, es posible que los archivos de imagen de Docker no se carguen.

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

  3. 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 la versión más reciente con .NET 8.0. Si usa .NET Framework, el cuadro de diálogo será un poco diferente.

  4. Seleccione el tipo de contenedor que quiera (Windows o Linux) y vaya a Crear.

Información general sobre Dockerfile

Visual Studio crea un Dockerfile en el proyecto, que proporciona la receta para crear una imagen final de Docker. Para obtener más información, consulte la referencia de Dockerfile sobre los comandos usados en el Dockerfile.

#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
#For more information, please see https://aka.ms/containercompat

FROM mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

FROM mcr.microsoft.com/dotnet/sdk:8.0-nanoserver-1809 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["MyWepApp/MyWebApp.csproj", "MyWebApp/"]
RUN dotnet restore "./MyWebApp/./MyWebApp.csproj"
COPY . .
WORKDIR "/src/MyWebApp"
RUN dotnet build "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyWebApp.dll"]

El elemento Dockerfile anterior se basa en la imagen .NET 8.0 del registro de contenedor de Microsoft (MCR) e incluye instrucciones para modificar la imagen base al crear el proyecto llamado MyWebApp y agregarlo 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, 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á activada, se expone un único puerto (80) para el tráfico HTTP.

Con Visual Studio 2022, versión 17.7 o posterior, puede tener como destino .NET 8. En ese caso, tiene la ventaja de poder ejecutar la aplicación de forma más segura, como usuario normal, en lugar de con permisos elevados. El Dockerfile predeterminado generado por Visual Studio para proyectos de .NET 8 está configurado para ejecutarse como un usuario normal. Para habilitar este comportamiento en un proyecto existente, agregue la línea USER app al Dockerfile en la imagen base. Además, dado que el puerto 80 está restringido para los usuarios normales, exponga los puertos 8080 y 8081 en lugar de 80 y 443. El puerto 8080 se usa para el tráfico HTTP y el puerto 8081 se usa para HTTPS. Para ejecutarse como usuario normal, el contenedor debe usar una imagen base de .NET 8 y la aplicación debe ejecutarse como una aplicación de .NET 8. Cuando se configura correctamente, el Dockerfile debe contener código como en el ejemplo siguiente:

FROM mcr.microsoft.com/dotnet/aspnet:8.0-preview AS base
USER app
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

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 será más rápido en ejecuciones posteriores.

Una vez completada la compilación, el explorador se abre y muestra la página principal de la aplicación. En la barra de direcciones del explorador, puede ver la dirección URL localhost 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: elija Crear un nuevo 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 vayan a usar el registro de contenedor.

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

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