Docker es un servicio de contenedorización que se utiliza para ejecutar aplicaciones en entornos aislados empaquetados con todas las dependencias y el código que necesita para funcionar. Puede ejecutar todo tipo de aplicaciones, incluidos programas basados en .NET que utilizan imágenes en tiempo de ejecución proporcionadas por Microsoft.
Dockerizar .NET
Microsoft proporciona imágenes base prediseñadas para ejecutar aplicaciones .NET. No necesitará manejar la instalación del tiempo de ejecución de .NET o SDK en su contenedor de Docker, ya que simplemente puede extender desde la imagen base de Microsoft para la versión de .NET que usa su aplicación.
A menos que planee implementar contenedores de Windows en un servidor de Windows, necesitará usar .NET Core o .NET 5. El tiempo de ejecución de .NET Framework más antiguo no es multiplataforma y no se ejecutará en contenedores con sistema operativo Linux.
Si no tiene Docker instalado en su máquina de desarrollo, deberá instalar Docker Desktop para tener acceso a la CLI. Si utiliza WSL en Windows, querrá habilitar el motor basado en WSL 2, que proporciona un mejor rendimiento.
Para probar las cosas, crearemos una nueva aplicación API ASP.NET. El mismo procedimiento general se aplicará a cualquier tipo de aplicación, ya que todo lo que Docker está haciendo es ejecutar una compilación cada vez que compila el contenedor e iniciar su aplicación con un comando de punto de entrada.
Crea un nuevo archivo llamado Dockerfile
en la raíz de su proyecto, donde se encuentra su solución. Pegue la siguiente configuración:
FROM mcr.microsoft.com/dotnet/core/sdk AS build-env WORKDIR /app # Copy csproj and restore COPY *.csproj ./ RUN dotnet restore # Copy everything else and build COPY . ./ RUN dotnet publish -o out # Build runtime image FROM mcr.microsoft.com/dotnet/core/runtime WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "DockerTest.dll"]
Este Dockerfile extrae la imagen del SDK de .NET Core para realizar la compilación. Copia el .csproj
sobre y restaura, luego copia todo lo demás y ejecuta una compilación. Luego, crea una nueva imagen a partir de la imagen de .NET Runtime y copia los artefactos de compilación.
Finalmente, el punto de entrada se define aquí como dotnet DockerTest.dll
. Esto iniciará el servidor web ASP.NET, aunque es posible que deba cambiar los parámetros de su aplicación o especificar un comando de punto de entrada completamente diferente.
Puede probar ejecutar su contenedor con docker container run
, pasándolo en el ID del contenedor de compilación:
docker container run containerid
Para una aplicación ASP.NET, deberá abrir puertos asignando un puerto en el host a un puerto en el contenedor:
docker run -p 80:80 containerid
Puede leer nuestra guía para trabajar con Docker y Dockerfiles para obtener más información.