Imágenes de Docker para ASP.NET Core

En este artículo se muestra cómo ejecutar una aplicación ASP.NET Core en contenedores de Docker.

Windows Home Edition no admite Hyper-V y Hyper-V es necesario para Docker.

Consulte Inclusión en un contenedor de una aplicación .NET con dotnet publish para información sobre cómo incluir una aplicación .NET en un contenedor con dotnet publish.

Imágenes de Docker para ASP.NET Core

En este tutorial, descargará una aplicación de ejemplo de ASP.NET Core y la ejecutará en contenedores de Docker. El ejemplo funciona con contenedores de Linux y Windows.

El Dockerfile de ejemplo usa la característica de compilación en varias fases de Docker para la compilación y ejecución en distintos contenedores. Los contenedores de compilación y ejecución se crean a partir de imágenes que proporciona Microsoft en Docker Hub:

  • dotnet/sdk

    En el ejemplo se usa esta imagen para compilar la aplicación. La imagen contiene el SDK de .NET, que incluye las herramientas de la línea de comandos (CLI). Esta imagen está optimizada para el desarrollo local, la depuración y las pruebas unitarias. Las herramientas instaladas para el desarrollo y la compilación hacen que la imagen sea relativamente grande.

  • dotnet/aspnet

    En el ejemplo se usa esta imagen para ejecutar la aplicación. La imagen contiene el entorno de ejecución y las bibliotecas de ASP.NET Core y está optimizada para la ejecución de aplicaciones en producción. Diseñada para acelerar la implementación y el inicio de las aplicaciones, la imagen es relativamente pequeña, de forma que se optimiza el rendimiento de la red desde Docker Registry hasta el host de Docker. Solo se copian en el contenedor los archivos binarios y el contenido necesario para ejecutar una aplicación. El contenido está listo para ejecutarse, lo que permite el tiempo más rápido desde docker run hasta el inicio de la aplicación. En el modelo de Docker no se necesita compilación de código dinámico.

Requisitos previos

Descarga de la aplicación de ejemplo

Probar la aplicación localmente

  • Vaya a la carpeta de proyecto en dotnet-docker/samples/aspnetapp/aspnetapp.

  • Ejecute el siguiente comando para compilar y ejecutar localmente la aplicación:

    dotnet run
    
  • Vaya a http://localhost:5000 en un explorador para probar la aplicación.

  • Presione Ctrl+C en el símbolo del sistema para detener la aplicación.

Ejecución en un contenedor de Linux o en un contenedor de Windows

  • Para ejecutarse en un contenedor de Linux, haga clic con el botón derecho en el icono cliente de Docker de la bandeja del sistema y seleccione Cambiar a contenedores de Linux.

  • Para ejecutarse en un contenedor de Windows, haga clic con el botón derecho en el icono cliente de Docker de la bandeja del sistema y seleccione Cambiar a contenedores de Windows.

  • Vaya a la carpeta de Dockerfile en dotnet-docker/samples/aspnetapp.

  • Ejecute los siguientes comandos para compilar y ejecutar el ejemplo en Docker:

    docker build -t aspnetapp .
    docker run -it --rm -p 5000:8080 --name aspnetcore_sample aspnetapp
    

    Los argumentos del comando build:

    • Asigne a la imagen el nombre aspnetapp.
    • Busque el archivo Dockerfile en la carpeta actual (el punto al final).

    Los argumentos del comando de ejecución:

    • Asigne un pseudo-TTY y manténgalo abierto aunque no esté asociado. (El mismo efecto que --interactive --tty).
    • Quite automáticamente el contenedor cuando se cierre.
    • Asigne al puerto 5000 de la máquina local el puerto 8080 en el contenedor.
    • Asigne al contenedor el nombre aspnetcore_sample.
    • Especifique la imagen aspnetapp.
  • Vaya a http://localhost:5000 en un explorador para probar la aplicación.

Compilaciones e implementaciones manuales

En algunos escenarios, puede que quiera implementar una aplicación en un contenedor mediante la copia de los recursos que son necesarios en tiempo de ejecución. En esta sección se muestra cómo realizar una implementación manual.

  • Vaya a la carpeta de proyecto en dotnet-docker/samples/aspnetapp/aspnetapp.

  • Ejecute el comando dotnet publish:

    dotnet publish -c Release -o published
    

    Los argumentos del comando:

    • Compile la aplicación en modo de versión (el valor predeterminado es modo de depuración).
    • Cree los recursos en la carpeta publicada.
  • Ejecute la aplicación.

    • Windows:

      dotnet published\aspnetapp.dll
      
    • Linux:

      dotnet published/aspnetapp.dll
      
  • Vaya a http://localhost:5000 para ver la página principal.

Para utilizar la aplicación publicada manualmente dentro de un contenedor de Docker, cree un nuevo Dockerfile y use el comando docker build . para crear una imagen.

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Para ver la nueva imagen,use el comando docker images.

El archivo Dockerfile

Aquí el archivo Dockerfile se usa con el comando docker build que ejecutó anteriormente. Se usa dotnet publish de la misma manera que en esta sección para realizar compilaciones e implementaciones.

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

En el archivo Dockerfile anterior, los archivos *.csproj se copian y se restauran como capas distintas. Cuando el comando docker build compila una imagen, usa una caché integrada. Si los archivos *.csproj no han cambiado desde la última vez que se ejecutó el comando docker build, no es necesario volver a ejecutar el comando dotnet restore. En su lugar, se vuelve a usar la caché integrada para la capa dotnet restore correspondiente. Para obtener más información, vea Procedimientos recomendados para escribir archivos Dockerfile.

Recursos adicionales

Pasos siguientes

El repositorio de Git que contiene la aplicación de ejemplo también incluye documentación. Para información general de los recursos disponibles en el repositorio, consulte el archivo Léame. En concreto, vea cómo implementar HTTPS:

Developing ASP.NET Core Applications with Docker over HTTPS (Desarrollo de aplicaciones ASP.NET Core con Docker a través de HTTPS)

Imágenes de Docker para ASP.NET Core

En este tutorial, descargará una aplicación de ejemplo de ASP.NET Core y la ejecutará en contenedores de Docker. El ejemplo funciona con contenedores de Linux y Windows.

El Dockerfile de ejemplo usa la característica de compilación en varias fases de Docker para la compilación y ejecución en distintos contenedores. Los contenedores de compilación y ejecución se crean a partir de imágenes que proporciona Microsoft en Docker Hub:

  • dotnet/sdk

    En el ejemplo se usa esta imagen para compilar la aplicación. La imagen contiene el SDK de .NET, que incluye las herramientas de la línea de comandos (CLI). Esta imagen está optimizada para el desarrollo local, la depuración y las pruebas unitarias. Las herramientas instaladas para el desarrollo y la compilación hacen que la imagen sea relativamente grande.

  • dotnet/aspnet

    En el ejemplo se usa esta imagen para ejecutar la aplicación. La imagen contiene el entorno de ejecución y las bibliotecas de ASP.NET Core y está optimizada para la ejecución de aplicaciones en producción. Diseñada para acelerar la implementación y el inicio de las aplicaciones, la imagen es relativamente pequeña, de forma que se optimiza el rendimiento de la red desde Docker Registry hasta el host de Docker. Solo se copian en el contenedor los archivos binarios y el contenido necesario para ejecutar una aplicación. El contenido está listo para ejecutarse, lo que permite el tiempo más rápido desde docker run hasta el inicio de la aplicación. En el modelo de Docker no se necesita compilación de código dinámico.

Requisitos previos

Descarga de la aplicación de ejemplo

Probar la aplicación localmente

  • Vaya a la carpeta de proyecto en dotnet-docker/samples/aspnetapp/aspnetapp.

  • Ejecute el siguiente comando para compilar y ejecutar localmente la aplicación:

    dotnet run
    
  • Vaya a http://localhost:5000 en un explorador para probar la aplicación.

  • Presione Ctrl+C en el símbolo del sistema para detener la aplicación.

Ejecución en un contenedor de Linux o en un contenedor de Windows

  • Para ejecutarse en un contenedor de Linux, haga clic con el botón derecho en el icono cliente de Docker de la bandeja del sistema y seleccione Cambiar a contenedores de Linux.

  • Para ejecutarse en un contenedor de Windows, haga clic con el botón derecho en el icono cliente de Docker de la bandeja del sistema y seleccione Cambiar a contenedores de Windows.

  • Vaya a la carpeta de Dockerfile en dotnet-docker/samples/aspnetapp.

  • Ejecute los siguientes comandos para compilar y ejecutar el ejemplo en Docker:

    docker build -t aspnetapp .
    docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
    

    Los argumentos del comando build:

    • Asigne a la imagen el nombre aspnetapp.
    • Busque el archivo Dockerfile en la carpeta actual (el punto al final).

    Los argumentos del comando de ejecución:

    • Asigne un pseudo-TTY y manténgalo abierto aunque no esté asociado. (El mismo efecto que --interactive --tty).
    • Quite automáticamente el contenedor cuando se cierre.
    • Asigne al puerto 5000 de la máquina local el puerto 80 en el contenedor.
    • Asigne al contenedor el nombre aspnetcore_sample.
    • Especifique la imagen aspnetapp.
  • Vaya a http://localhost:5000 en un explorador para probar la aplicación.

Compilaciones e implementaciones manuales

En algunos escenarios, puede que quiera implementar una aplicación en un contenedor mediante la copia de los recursos que son necesarios en tiempo de ejecución. En esta sección se muestra cómo realizar una implementación manual.

  • Vaya a la carpeta de proyecto en dotnet-docker/samples/aspnetapp/aspnetapp.

  • Ejecute el comando dotnet publish:

    dotnet publish -c Release -o published
    

    Los argumentos del comando:

    • Compile la aplicación en modo de versión (el valor predeterminado es modo de depuración).
    • Cree los recursos en la carpeta publicada.
  • Ejecute la aplicación.

    • Windows:

      dotnet published\aspnetapp.dll
      
    • Linux:

      dotnet published/aspnetapp.dll
      
  • Vaya a http://localhost:5000 para ver la página principal.

Para utilizar la aplicación publicada manualmente dentro de un contenedor de Docker, cree un nuevo Dockerfile y use el comando docker build . para crear una imagen.

FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Para ver la nueva imagen,use el comando docker images.

El archivo Dockerfile

Aquí el archivo Dockerfile se usa con el comando docker build que ejecutó anteriormente. Se usa dotnet publish de la misma manera que en esta sección para realizar compilaciones e implementaciones.

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

En el archivo Dockerfile anterior, los archivos *.csproj se copian y se restauran como capas distintas. Cuando el comando docker build compila una imagen, usa una caché integrada. Si los archivos *.csproj no han cambiado desde la última vez que se ejecutó el comando docker build, no es necesario volver a ejecutar el comando dotnet restore. En su lugar, se vuelve a usar la caché integrada para la capa dotnet restore correspondiente. Para obtener más información, vea Procedimientos recomendados para escribir archivos Dockerfile.

Recursos adicionales

Pasos siguientes

El repositorio de Git que contiene la aplicación de ejemplo también incluye documentación. Para información general de los recursos disponibles en el repositorio, consulte el archivo Léame. En concreto, vea cómo implementar HTTPS:

Developing ASP.NET Core Applications with Docker over HTTPS (Desarrollo de aplicaciones ASP.NET Core con Docker a través de HTTPS)

Imágenes de Docker para ASP.NET Core

En este tutorial, descargará una aplicación de ejemplo de ASP.NET Core y la ejecutará en contenedores de Docker. El ejemplo funciona con contenedores de Linux y Windows.

El Dockerfile de ejemplo usa la característica de compilación en varias fases de Docker para la compilación y ejecución en distintos contenedores. Los contenedores de compilación y ejecución se crean a partir de imágenes que proporciona Microsoft en Docker Hub:

  • dotnet/sdk

    En el ejemplo se usa esta imagen para compilar la aplicación. La imagen contiene el SDK de .NET, que incluye las herramientas de la línea de comandos (CLI). Esta imagen está optimizada para el desarrollo local, la depuración y las pruebas unitarias. Las herramientas instaladas para el desarrollo y la compilación hacen que la imagen sea relativamente grande.

  • dotnet/core/sdk

    En el ejemplo se usa esta imagen para compilar la aplicación. La imagen contiene el SDK de .NET Core, que incluye las herramientas de línea de comandos (CLI). Esta imagen está optimizada para el desarrollo local, la depuración y las pruebas unitarias. Las herramientas instaladas para el desarrollo y la compilación hacen que la imagen sea relativamente grande.

  • dotnet/aspnet

    En el ejemplo se usa esta imagen para ejecutar la aplicación. La imagen contiene el entorno de ejecución y las bibliotecas de ASP.NET Core y está optimizada para la ejecución de aplicaciones en producción. Diseñada para acelerar la implementación y el inicio de las aplicaciones, la imagen es relativamente pequeña, de forma que se optimiza el rendimiento de la red desde Docker Registry hasta el host de Docker. Solo se copian en el contenedor los archivos binarios y el contenido necesario para ejecutar una aplicación. El contenido está listo para ejecutarse, lo que permite el tiempo más rápido desde docker run hasta el inicio de la aplicación. En el modelo de Docker no se necesita compilación de código dinámico.

  • dotnet/core/aspnet

    En el ejemplo se usa esta imagen para ejecutar la aplicación. La imagen contiene el entorno de ejecución y las bibliotecas de ASP.NET Core y está optimizada para la ejecución de aplicaciones en producción. Diseñada para acelerar la implementación y el inicio de las aplicaciones, la imagen es relativamente pequeña, de forma que se optimiza el rendimiento de la red desde Docker Registry hasta el host de Docker. Solo se copian en el contenedor los archivos binarios y el contenido necesario para ejecutar una aplicación. El contenido está listo para ejecutarse, lo que permite el tiempo más rápido desde docker run hasta el inicio de la aplicación. En el modelo de Docker no se necesita compilación de código dinámico.

Requisitos previos

Descarga de la aplicación de ejemplo

Probar la aplicación localmente

  • Vaya a la carpeta de proyecto en dotnet-docker/samples/aspnetapp/aspnetapp.

  • Ejecute el siguiente comando para compilar y ejecutar localmente la aplicación:

    dotnet run
    
  • Vaya a http://localhost:5000 en un explorador para probar la aplicación.

  • Presione Ctrl+C en el símbolo del sistema para detener la aplicación.

Ejecución en un contenedor de Linux o en un contenedor de Windows

  • Para ejecutarse en un contenedor de Linux, haga clic con el botón derecho en el icono cliente de Docker de la bandeja del sistema y seleccione Cambiar a contenedores de Linux.

  • Para ejecutarse en un contenedor de Windows, haga clic con el botón derecho en el icono cliente de Docker de la bandeja del sistema y seleccione Cambiar a contenedores de Windows.

  • Vaya a la carpeta de Dockerfile en dotnet-docker/samples/aspnetapp.

  • Ejecute los siguientes comandos para compilar y ejecutar el ejemplo en Docker:

    docker build -t aspnetapp .
    docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
    

    Los argumentos del comando build:

    • Asigne a la imagen el nombre aspnetapp.
    • Busque el archivo Dockerfile en la carpeta actual (el punto al final).

    Los argumentos del comando de ejecución:

    • Asigne un pseudo-TTY y manténgalo abierto aunque no esté asociado. (El mismo efecto que --interactive --tty).
    • Quite automáticamente el contenedor cuando se cierre.
    • Asigne al puerto 5000 de la máquina local el puerto 80 en el contenedor.
    • Asigne al contenedor el nombre aspnetcore_sample.
    • Especifique la imagen aspnetapp.
  • Vaya a http://localhost:5000 en un explorador para probar la aplicación.

Compilaciones e implementaciones manuales

En algunos escenarios, puede que quiera implementar una aplicación en un contenedor mediante la copia de los recursos que son necesarios en tiempo de ejecución. En esta sección se muestra cómo realizar una implementación manual.

  • Vaya a la carpeta de proyecto en dotnet-docker/samples/aspnetapp/aspnetapp.

  • Ejecute el comando dotnet publish:

    dotnet publish -c Release -o published
    

    Los argumentos del comando:

    • Compile la aplicación en modo de versión (el valor predeterminado es modo de depuración).
    • Cree los recursos en la carpeta publicada.
  • Ejecute la aplicación.

    • Windows:

      dotnet published\aspnetapp.dll
      
    • Linux:

      dotnet published/aspnetapp.dll
      
  • Vaya a http://localhost:5000 para ver la página principal.

Para utilizar la aplicación publicada manualmente dentro de un contenedor de Docker, cree un nuevo Dockerfile y use el comando docker build . para crear una imagen.

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Para ver la nueva imagen,use el comando docker images.

El archivo Dockerfile

Aquí el archivo Dockerfile se usa con el comando docker build que ejecutó anteriormente. Se usa dotnet publish de la misma manera que en esta sección para realizar compilaciones e implementaciones.

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Para ver la nueva imagen,use el comando docker images.

El archivo Dockerfile

Aquí el archivo Dockerfile se usa con el comando docker build que ejecutó anteriormente. Se usa dotnet publish de la misma manera que en esta sección para realizar compilaciones e implementaciones.

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

En el archivo Dockerfile anterior, los archivos *.csproj se copian y se restauran como capas distintas. Cuando el comando docker build compila una imagen, usa una caché integrada. Si los archivos *.csproj no han cambiado desde la última vez que se ejecutó el comando docker build, no es necesario volver a ejecutar el comando dotnet restore. En su lugar, se vuelve a usar la caché integrada para la capa dotnet restore correspondiente. Para obtener más información, vea Procedimientos recomendados para escribir archivos Dockerfile.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

El archivo Dockerfile

Aquí el archivo Dockerfile se usa con el comando docker build que ejecutó anteriormente. Se usa dotnet publish de la misma manera que en esta sección para realizar compilaciones e implementaciones.

FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Como se indicó en el archivo Dockerfile anterior, los archivos *.csproj se copian y se restauran como capas distintas. Cuando el comando docker build compila una imagen, usa una caché integrada. Si los archivos *.csproj no han cambiado desde la última vez que se ejecutó el comando docker build, no es necesario volver a ejecutar el comando dotnet restore. En su lugar, se vuelve a usar la caché integrada para la capa dotnet restore correspondiente. Para obtener más información, vea Procedimientos recomendados para escribir archivos Dockerfile.

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

El archivo Dockerfile

Aquí el archivo Dockerfile se usa con el comando docker build que ejecutó anteriormente. Se usa dotnet publish de la misma manera que en esta sección para realizar compilaciones e implementaciones.

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

En el archivo Dockerfile anterior, los archivos *.csproj se copian y se restauran como capas distintas. Cuando el comando docker build compila una imagen, usa una caché integrada. Si los archivos *.csproj no han cambiado desde la última vez que se ejecutó el comando docker build, no es necesario volver a ejecutar el comando dotnet restore. En su lugar, se vuelve a usar la caché integrada para la capa dotnet restore correspondiente. Para obtener más información, vea Procedimientos recomendados para escribir archivos Dockerfile.

Recursos adicionales

Pasos siguientes

El repositorio de Git que contiene la aplicación de ejemplo también incluye documentación. Para información general de los recursos disponibles en el repositorio, consulte el archivo Léame. En concreto, vea cómo implementar HTTPS:

Developing ASP.NET Core Applications with Docker over HTTPS (Desarrollo de aplicaciones ASP.NET Core con Docker a través de HTTPS)