DockerMultiStage

Poder optimizar el tamaño de las imágenes de los contenedores para aplicaciones realizadas en Dot Net Core.

Para comenzar creamos una simple aplicacion de consola "Hola Mundo".

> dotnet new console

Para crear la imagen de esta aplicacion en Docker utilizamos el siguiente DockerFile:

FROM microsoft/dotnet:2.2-sdk
COPY . ./docker-test
WORKDIR /docker-test/
RUN dotnet build -c Release
ENTRYPOINT ["dotnet", "run", "-c", "Release", "--no-build"]

Veamos linea a linea lo que se realiza aca. En primer lugar utilizamos como imagen base la version que contine el sdk de DotNet Core 2.2 [https://hub.docker.com/r/microsoft/dotnet] como debemos compilar nuestra aplicación.

Luego con "COPY . ./docker-test" copiamos nuestro codigo a la imagen de docker.

Nos posicionamos donde esta el codigo de nuestra aplicación.

Finalmente definimos como se debe iniciar nuestra aplicación.

Ahora creamos nuestra imagen con nombre docker-test

> docker build -t docker-test .

Si no tenemos la imagen base este proceso va tardar unos minutos dado que debe descargarla y luego genera nuestra imagen.

si vemos que tenemos como imagenes con : docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker-test         latest              8e0d17fcfbbb        2 hours ago         1.74GB

1.74 GB que deberia ser utilizada solo para un Hola Mundo !!!, ahora con MultiStage se puede utilizar una imagen para "compilar" y otra imagen para correr la aplicación que por supuesto utiliza mucho menos espacio.

FROM microsoft/dotnet:2.2-sdk AS build
COPY . ./docker-test
WORKDIR /docker-test/
RUN dotnet build -c Release -o output

FROM microsoft/dotnet:2.2-runtime AS runtime
COPY --from=build /docker-test/output .
ENTRYPOINT ["dotnet", "docker-test.dll"]

con esto logramos que la imagen de la aplicacion sea de solo 180 MG

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              63fb9180b95b        2 minutes ago       180MB

Podriamos pensar que 180 MB es mucho para un simple "Hola Mundo", pero considerando que no se requiere nada para poder ejecutar solo Docker, nos olvidamos de ... "en mi maquina funciona".

Description
Poder optimizar el tamaño de las imágenes de los contenedores para aplicaciones realizadas en Dot Net Core.
Readme 80 KiB
Languages
Dockerfile 53.1%
C# 46.9%