Compartir a través de


Inicio rápido: Docker en Visual Studio

Con Visual Studio, puede compilar, depurar y ejecutar aplicaciones .NET en contenedor, ASP.NET y ASP.NET Core y publicarlas en Azure Container Registry, Docker Hub, Azure App Service o su propio Container Registry. En este artículo, publicaremos una aplicación ASP.NET Core en Azure Container Registry.

Prerrequisitos

Instalación y configuración

Para la instalación de Docker, revise primero la información de Docker Desktop para Windows: Qué saber antes de instalar. A continuación, instale Docker Desktop.

Adición de un proyecto a un contenedor de Docker

  1. Cree un proyecto con la plantilla de ASP.NET Core Web App o si desea usar .NET Framework en lugar de .NET Core, elija ASP.NET aplicación web (.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, tiene un aspecto un poco diferente.

  3. Seleccione el tipo de contenedor que desee (Windows o Linux) y haga clic en Crear.

Introducción a 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 dockerfile anterior se basa en la imagen dotnet/core/aspnet e incluye instrucciones para modificar la imagen base mediante la compilación del proyecto y su adición al contenedor. Si usa .NET Framework, la imagen base será diferente.

Si la casilla Configurar para HTTPS del cuadro de diálogo del nuevo proyecto está marcada, Dockerfile expondrá dos puertos. Se usa un puerto para el tráfico HTTP; el otro puerto se usa 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 e inicie la depuración de la aplicación. Es posible que vea un mensaje con un mensaje sobre cómo confiar en un certificado; elija 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 un tiempo 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 de contenedores

Si tiene Visual Studio 2019 versión 16.4 o posterior, puede usar la ventana Contenedores para ver los contenedores en ejecución en el equipo, así como las imágenes que tiene disponibles.

Abra la ventana Contenedores mediante el cuadro de búsqueda del IDE (presione Ctrl+Q para usarlo), escriba containery elija la ventana Contenedores de de la lista.

Puede montar la ventana Contenedores en un lugar cómodo, como por ejemplo, debajo del editor, moviéndolo y 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.

Publicación de 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 release 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: elija Docker Container Registry.

  4. Elija Crear Azure Container Registry.

    cuadro de diálogo Publicar: elija Crear un nuevo registro de contenedor de Azure.

  5. Rellene los valores deseados en el Crear un nuevo Azure Container Registry.

    Ajuste Valor sugerido Descripción
    Prefijo de DNS Nombre único global Nombre que identifica de forma única el registro de contenedor.
    Suscripción Elección de la 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 nuevo grupo de recursos.
    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 de cerca de usted o cerca de 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.

    es-ES: 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 exitosa.

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 aplicaciones .NET en contenedor, ASP.NET y ASP.NET Core y publicarlas en Azure Container Registry, Docker Hub, Azure App Service o su propio Container Registry. En este artículo, publicará una aplicación de ASP.NET Core en el Azure Container Registry.

Prerrequisitos

Instalación y configuración

Para la instalación de Docker, revise primero la información de Docker Desktop para Windows: Qué saber antes de instalar. A continuación, instale Docker Desktop.

Adición de 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 (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 de ASP.NET Core Web App o si desea usar .NET Framework en lugar de .NET Core, elija ASP.NET aplicación web (.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 es un poco diferente.

  4. Seleccione el tipo de contenedor que desee (Windows o Linux) y seleccione Crear.

Introducción a 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 del Dockerfile para obtener detalles sobre los comandos utilizados 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.

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

# This stage is used to build the service project
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

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/publish /p:UseAppHost=false

# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
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 es diferente.

Si la casilla Configurar para HTTPS del cuadro de diálogo del nuevo proyecto está marcada, Dockerfile expondrá dos puertos. Se usa un puerto para el tráfico HTTP; el otro puerto se usa 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 los proyectos de Visual Studio para .NET 8 está configurado para ejecutarse como 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 e inicie la depuración de la aplicación. Es posible que vea un mensaje con un mensaje sobre cómo confiar en un certificado; elija 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 un tiempo en descargar la imagen base, pero es 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 del 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 (presione Ctrl+Q para usarlo), escriba containery elija la ventana Contenedores de de la lista.

Puede montar la ventana Contenedores en un lugar cómodo, como por ejemplo, debajo del editor, moviéndolo y 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.

Publicación de 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 release 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: elija Docker Container Registry.

  4. Elija Crear Azure Container Registry.

    cuadro de diálogo Publicar: elija Crear un nuevo registro de contenedor de Azure.

  5. Rellene los valores deseados en el Create a new Azure Container Registry (Crear una nueva instancia de Azure Container Registry).

    Ajuste Valor sugerido Descripción
    Prefijo de DNS Nombre único global Nombre que identifica de forma única el registro de contenedor.
    Suscripción Elección de la 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 nuevo grupo de recursos.
    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 de cerca de usted o cerca de otros servicios que puedan usar el registro de contenedor.

    Captura de pantalla del cuadro de diálogo de Visual Studio para crear un registro de contenedor de Azure.

  6. Seleccione Crear. El cuadro de diálogo Publicar ahora 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 exitosa.

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