Este ejemplo es una aplicación desarrollada en c# que permite hacer todo el ciclo de vida de la compilación y la ejecución usando contenedores docker.
Esto provee de una gran ventaja operativa ya que no requiere que tener instalado en los entornos de despliegue las herramientas de compilación y empaquetado.
Comenzaremos creando una aplicacion base que no tendrá ningun desarrollo extra solo el uso de la plantilla que provee el cliente de .net, una aplicacion web basica en c#.
Le añadiremos un Dockerfile base que puedes usar el proporcionando por Microsoft o crear uno propio. Con tan solo añadir el contenedor tenemos la capacidad de complilar y empaquetar aplicaciones en contenedores docker.
¿Dónde lo podemos usar?
Podemos aplicar este sistema a casi a cualquier plantilla moderna generada desde el aplicativo dotnet o para desarrollo realizados desde un IDE siempre y cuando se pueda usar la base de .Net Core.
Creación del App
Para la creación de este articulo nos hemos basado en un ejemplo base que se genera desde el CLI dotnet.
# nueva app usando la plantilla de webapp
# proyecto nombre PizzeryMama
# No usar https
# usa el framework base net 6.0
> dotnet new webapp -o PizzeryMama –no-https -f net6.0.
Compilación y empaquetado
El proceso de compilación y empaquetado se hace todo desde dentro de imágenes docker lo que dota de independencia del entorno base (Windows, Linux, Mac) desde el que se ejecute siempre que este sea capad de ejecutar docker.
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
[scss]FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY [«PizzeryMama.csproj», «/src»]
RUN dotnet restore «PizzeryMama.csproj»
COPY . .
RUN dotnet build «PizzeryMama.csproj» -c Release -o /app/build
FROM build AS publish
RUN dotnet publish «PizzeryMama.csproj» -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY –from=publish /app/publish .
ENTRYPOINT [«dotnet», «PizzeryMama.dll»]
[/scss]
Este proceso le dividimos en dos fases.
En la primera Fase pasamos el proyecto dentro del contenedor. Para el empaquetado de la herramienta se usa la plataforma Docker para ello se ha genera un contenedor con las dependencias de compilación y SDK.
En la segunda fase empaquetamos la base en un contenedor que contiene el compilado y Runtime base de ejecución .Net Core.
Como resultado tenemos un contenedor que tiene las dependencias minimas y el ejecutable para hacer la operativa necesaria que haga el servicio.
Conclusión
La plataforma nueva de Microsoft acerca cada vez más los desarrollo a las arquitecturas agiles y si eso le añadimos el uso de .net sin la necesidad de tener que tener una arquitectura base propietaria (servidor Windows para ejecutarse). Hacen de .Net Core una herramienta muy versatil y que facilita mucho los desarrollos acortando tiempos en el ciclo de vida. Gracias a la flexibilidad que proporcionan los despliegues basados en contenedores.