El proceso de contenerización comienza con la creación de una imagen. Este flujo consta de dos fases principales: primero, la escritura del Dockerfile, donde se definen las instrucciones y dependencias; y segundo, la ejecución del comando docker build, que solicita al Docker Daemon la construcción de la imagen organizada en capas replicables.
Dockerfile
Un Dockerfile es un archivo de texto plano, sin extensión, que contiene una lista secuencial de instrucciones o comandos necesarios para construir una imagen de Docker de forma automática.
El script de configuración definido en el dockerfile describe exactamente qué necesita tu software para ejecutarse: desde el sistema operativo base hasta las variables de entorno y el código de tu aplicación.
Instrucciones Principales
FROM: Define la imagen base sobre la cual se construirá la nueva imagen. Es obligatoria y suele ser el primer comando (por ejemplo,FROM mcr.microsoft.com/dotnet/sdk:9.0).WORKDIR: Establece el directorio de trabajo para cualquier instrucción posterior (comoRUN,CMDoCOPY). Si el directorio no existe, Docker lo crea automáticamente.COPY: Copia archivos o directorios desde el sistema de archivos del host (tu computadora) al sistema de archivos del contenedor. En tu caso, se usa para copiar los archivos.csprojy el código fuente.RUN: Ejecuta comandos durante el proceso de construcción de la imagen. Se utiliza comúnmente para instalar paquetes o, como en tu archivo, para ejecutardotnet restoreydotnet build.ENV: Establece variables de entorno que persisten cuando el contenedor se está ejecutando. Por ejemplo, lo usas para definirASPNETCORE_ENVIRONMENT=Development.ENTRYPOINT: Configura el contenedor para que se ejecute como un ejecutable. Define el comando principal que se iniciará cuando el contenedor arranque (por ejemplo,dotnet example.dll
Otras Instrucciones Comunes
ARG: Define variables que los usuarios pueden pasar al constructor en el momento de la creación (build-time), comoBUILD_CONFIGURATION=Release.USER: Especifica el nombre de usuario o grupo que se utilizará al ejecutar la imagen (por ejemplo,USER $APP_UID).EXPOSE: Informa a Docker que el contenedor escuchará en los puertos de red especificados en tiempo de ejecución (común en aplicaciones web, aunque no aparece explícitamente en tu Worker Service).CMD: Proporciona valores predeterminados para un contenedor en ejecución. A diferencia deENTRYPOINT, los argumentos deCMDse pueden sobrescribir fácilmente al iniciar el contenedor.
Multi-stage build
El Multi-stage build (construcción multietapa) es una técnica de optimización en Docker que permite dividir el proceso de creación de una imagen en varias fases o “etapas” dentro de un mismo Dockerfile.
Su objetivo principal es reducir drásticamente el tamaño de la imagen final y mejorar la seguridad, dejando fuera todo lo que no sea estrictamente necesario para ejecutar la aplicación.
En un Dockerfile tradicional, todo lo que instalas (compiladores, herramientas de build, dependencias de desarrollo) se queda guardado en la imagen, haciéndola muy pesada.
Con el multi-stage build, puedes usar una imagen grande para compilar tu código y luego copiar solo los archivos resultantes (el ejecutable o los binarios) a una imagen mucho más pequeña y ligera para la ejecución.
# Instrucción (Mayúscula) + Argumento
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY ["Proyecto/Proyecto.csproj", "Proyecto/"]
RUN dotnet restore "Proyecto/Proyecto.csproj"
