Escribiendo un Dockerfile
Bajar imágenes prefabricadas como node o postgres desde Docker Hub es genial, pero el verdadero poder de Docker brilla cuando necesitas congelar y empaquetar tu propiocódigo (Por ejemplo, tu backend en Python) para que tus compañeros puedan correrlo sin instalar Python en sus computadoras.
Para transformar tu código en una "Imagen de Docker" customizada, utilizamos un archivo de texto simple llamado Dockerfile. (Así, mayúscula al inicio, sin extensiones como .txt ni nada).
Este archivo debe alojarse en la carpeta raíz (la base) de tu proyecto.
Estructura de un Dockerfile
El Dockerfile es literalmente una receta que se ejecuta desde arriba hacia abajo instrucción por instrucción.
Existen 4 o 5 palabras clave vitales que usarás el 99% de tu carrera.
Imaginemos que tienes una aplicación simple hecha en Node.js que requiere instalar paquetes con npm install y se inicia con node app.js, este sería tu Dockerfile base:
# 1. FROM: "El ingrediente base"
# Define el sistema operativo o contenedor pre-construido del que partiremos.
# EN VEZ de pedir 'ubuntu' vacío e instalarle NodeJS a mano por terminal...
# Usamos una imagen oficial que la gente de NodeJS ya precargó para nosotros y que es super delgada (alpine es una versión miniatura y segura de linux).
FROM node:18-alpine
# 2. WORKDIR: "Creando mi oficina"
# Entramos al Linux emulado por Docker y le decimos que nos cree y envíe a la carpeta '/app'.
# Todo comando posterior que escribamos ocurrirá EXCLUSIVAMENTE dentro de ese cuarto seguro aislado.
WORKDIR /app
# 3. COPY: "Trasladando archivos desde Windows a Linux"
# Sintaxis: COPY [archivo local tuyo] [destino Linux]
# El [.] significa "Copia TODO lo de mi proyecto real en mi PC hacia la carpeta Linux donde estamos ahora parados (/app)"
COPY . .
# 4. RUN: "Ejecutando la configuración"
# Comando para que ese Linux empiece a escribir cosas en la terminal.
# Aquí es donde instalamos todas nuestras librerías y armamos el empaquetado del software de nuestro código que antes trajimos.
RUN npm install
# 5. CMD: "Instruyendo cómo arrancar"
# Este comando NO se ejecuta al momento de construir la imagen (como 'RUN').
# Este comando se quedará 'dormido' y se ejecutará ÚNICAMENTE cuando alguien ejecute 'docker run' en su propia pantalla.
CMD ["node", "app.js"]
Construyendo tu Imagen (docker build)
Tienes lista tu receta (Dockerfile). Tu máquina sigue sin tener una imagen generada.
Para "hornearla", abre tu terminal donde está el archivo y escribe build.
docker build -t mi-super-api-node .
Desglose de este comando que cambiará tu vida productiva:
build: La orden principal de cocina.-t: Significatag(etiqueta). Lo usamos para darle un nombre descriptivo ("mi-super-api-node") y no solo un ID random incomprensible de 40 números y letras..: "Punto" significa "El directorio actual". Le estás diciendo: "Oye Docker, busca el archivo llamadoDockerfileen esta misma carpeta y úsalo, porque ahí también está todo el código fuente".
Si corres docker images en tu consola después de esto, notarás orgullosamente una nueva imagen instalada con el nombre de tu aplicación, lista para ser convertida a un contenedor donde sea, cuando sea y para dar servicio como si nada hubiese pasado en ningún OS en este planeta.