Docker es un servicio de creación de contenedores, 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 los programas basados en .NET que utilizan imágenes de tiempo de ejecución proporcionadas por Microsoft.
Dockerización de .NET
Microsoft proporciona imágenes base prediseñadas para ejecutar aplicaciones .NET. No necesitará manejar la instalación del tiempo de ejecución o SDK de .NET en su contenedor de Docker, ya que simplemente puede ampliar 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, deberá usar .NET Core o .NET 5. El tiempo de ejecución de .NET Framework anterior no es multiplataforma y no se ejecutará en contenedores basados en Linux.
Si no tiene Docker instalado en su máquina de desarrollo, deberá instalar Docker Desktop para tener acceso a la CLI. Si usa 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. Se aplicará el mismo procedimiento general para cualquier tipo de aplicación, ya que lo único que hace Docker 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 SDK de .NET Core para realizar la compilación. Copia el .csproj
over y restaura, luego copia todo lo demás y ejecuta una compilación. Luego, construye una nueva imagen a partir de la imagen de .NET Runtime y copia los artefactos de construcció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 la ejecución de 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.