Docker Containerization explicado simplemente (con diagramas y código real)

Docker Containerization : lo esencial en un artículo — código real, diagramas y pasos concretos, extractos de un curso de 41 lecciones.

Docker Containerization explicado simplemente (con diagramas y código real)

Un guía que va al grano: Docker Containerization desglosada con diagramas, ejemplos concretos y comandos probados. Todo proviene de un curso estructurado de 12 capítulos — aquí tienes lo mejor.

tl;dr
  • Instalar una VM UBUNTU
  • Descubrir docker
  • Comandos esenciales
  • Dockerfile
  • Containerizar Flask
~$ cat ./parcours.md # Docker Containerization — 11 capítulos
01
Instalar una VM UBUNTU
→ Descargar VirtualBox y la ISO Ubuntu→ Crear la VM e instalar Ubuntu+ 1 más lecciones
02
Descubrir docker
→ ¿Qué es Docker y por qué usarlo?→ Instalar Docker en Ubuntu+ 1 más lecciones
03
Comandos esenciales
→ Los comandos fundamentales→ Puertos, volúmenes y variables de entorno+ 2 más lecciones
04
Dockerfile
→ Anatomía de un Dockerfile→ Construir y lanzar su primera imagen+ 1 más leçons
05
Containerizar Flask
→ Recordatorio Flask y creación de la aplicación→ Dockerfile Flask, build y run+ 1 más leçons
06
Containerizar FastAPI
→ Recordatorio FastAPI y creación de la API→ Dockerfile FastAPI y Swagger UI+ 1 más leçons
07
Containerizar Streamlit
→ Recordatorio Streamlit y creación del dashboard→ Dockerfile Streamlit y configuración headless+ 1 más leçons
08
Docker-compose
→ ¿Por qué Docker Compose?→ Proyecto Flask + PostgreSQL+ 2 más leçons
🏁
Proyecto final (+ 3 capítulos en camino)
→ Sales con un proyecto concreto y demostrable

Anatomía de un Dockerfile

NOTEObjetivo — Comprender qué es un Dockerfile, dominar cada instrucción y escribir tu primer Dockerfile para crear una imagen Docker personalizada.
WARNINGAntes de empezar — Este laboratorio supone que has seguido los módulos anteriores. Si encuentras conflictos de nombres, puertos ya en uso, o si Docker no responde correctamente, usa estos comandos para empezar de cero:
bash
# Arrêter TOUS les conteneurs en cours
docker stop $(docker ps -a -q)

# Supprimer TOUS les conteneurs
docker rm $(docker ps -a -q)

# Supprimer TOUTES les images (optionnel)
docker rmi $(docker images -q)

# Forcer la suppression si une image résiste
docker rmi -f $(docker images -q)
⚠ Atención — Estos comandos eliminan todo. Úsalos solo si quieres empezar desde un entorno limpio. La opción -f (force) elimina incluso las imágenes usadas por contenedores.

Objetivos pedagógicos

TIPAl finalizar este módulo — Serás capaz de dominar estas competencias esenciales.

¿Qué es un Dockerfile?

Un Dockerfile es un archivo de texto que contiene una serie de instrucciones para construir una imagen Docker. Es como una receta de cocina: cada instrucción es un paso que transforma la imagen base en tu imagen personalizada.

NOTEAnalogía — Piensa en el Dockerfile como una receta de cocina:
  • FROM = Los ingredientes base (la harina, la mantequilla...)
  • WORKDIR = El plano de trabajo (la mesa de cocina)
  • COPY = Añadir ingredientes (el azúcar, los huevos...)
  • RUN = Preparar (mezclar, cocinar...)
  • EXPOSE = Indicar la presentación (el plato de servicio)
  • CMD = Servir el plato (el comando final)

Imagen base

El Dockerfile siempre parte de una imagen existente (FROM). Nunca se empieza desde cero.

Instrucciones

Cada línea es una instrucción que modifica la imagen: copiar archivos, instalar paquetes, configurar...

Imagen final

El resultado es una imagen personalizada lista para lanzarse con docker run.

Las instrucciones principales

FROM – Imagen base

Primera instrucción de un Dockerfile. Define la imagen de partida sobre la que se construye.

output
FROM python:3.11-slim
NOTEExplicación — Se usa la imagen oficial de Python 3.11 en versión slim (versión ligera, sin herramientas innecesarias). Esto nos da un sistema Linux con Python 3.11 ya instalado.

WORKDIR – Carpeta de trabajo

Define el directorio de trabajo dentro del contenedor. Todas las instrucciones siguientes (COPY, RUN, CMD) se ejecutarán en esta carpeta.

output
WORKDIR /app
TIPBuena práctica — Usa siempre WORKDIR en lugar de RUN cd /app. WORKDIR crea la carpeta automáticamente si no existe y persiste para todas las instrucciones siguientes.

COPY – Copiar archivos

Copia archivos desde tu máquina (el «contexto de build») hacia el contenedor.

output
COPY . .

El primer . = la carpeta actual en tu máquina. El segundo . = el WORKDIR dentro del contenedor (/app).

Layers, caché y buenas prácticas

NOTEObjetivo — Comprender el sistema de layers y caché de Docker, y aplicar las buenas prácticas para escribir Dockerfiles optimizados.
WARNINGAntes de empezar — Este laboratorio supone que has seguido los módulos anteriores. Si encuentras conflictos de nombres, puertos ya en uso, o si Docker no responde correctamente, usa estos comandos para empezar de cero:
bash
# Arrêter TOUS les conteneurs en cours
docker stop $(docker ps -a -q)

# Supprimer TOUS les conteneurs
docker rm $(docker ps -a -q)

# Supprimer TOUTES les images (optionnel)
docker rmi $(docker images -q)

# Forcer la suppression si une image résiste
docker rmi -f $(docker images -q)
⚠ Atención — Estos comandos eliminan todo. Úsalos solo si quieres empezar desde un entorno limpio. La opción -f (force) elimina incluso las imágenes usadas por contenedores.

Objetivos pedagógicos

TIPAl finalizar este módulo — Serás capaz de dominar estas competencias esenciales.

Cada instrucción = 1 layer

Cuando Docker ejecuta un Dockerfile, cada instrucción (FROM, RUN, COPY, etc.) crea un nuevo layer (capa). Una imagen Docker es una pila de layers apilados unos sobre otros.

output
FROM python:3.11-slim     ← Layer 1 (image de base)
WORKDIR /app              ← Layer 2
COPY requirements.txt .   ← Layer 3
RUN pip install ...       ← Layer 4
COPY . .                  ← Layer 5
CMD ["python", "app.py"]  ← Layer 6 (métadonnées)
NOTE¿Por qué layers? — Los layers permiten a Docker:
  • Compartir los layers comunes entre varias imágenes (ej: todas las imágenes Python comparten el mismo layer base)
  • Almacenar en caché los layers para acelerar los builds
  • Reducir el espacio en disco almacenando cada layer solo una vez

La caché de Docker

Docker almacena en caché cada layer. Durante un rebuild, Docker verifica si un layer ha cambiado. Si nada ha cambiado, reutiliza el layer en caché en lugar de reconstruirlo.

WARNINGRegla fundamental — Si un layer cambia, todos los layers siguientes se reconstruyen, aunque no hayan cambiado. Por eso el orden de las instrucciones es crucial.

Mal orden vs buen orden

MAL: requirements después de COPY . .

output
FROM python:3.11-slim
WORKDIR /app
COPY . .                            ← Tout le code source
RUN pip install -r requirements.txt ← Installation des dépendances
CMD ["python", "app.py"]
WARNINGProblema — Cada vez que modificas tu código (incluso un espacio en app.py), el layer COPY . . cambia. Como está antes de RUN pip install, Docker debe reinstalar todas las dependencias en cada build. En un proyecto con muchas dependencias, esto puede tardar varios minutos.

BIEN: requirements antes de COPY . .

output
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .             ← Seulement les dépendances
RUN pip install -r requirements.txt ← Installation (caché si requirements.txt n'a pas changé)
COPY . .                            ← Le code source (change souvent)
CMD ["python", "app.py"]
TIPVentaja — Cuando modificas tu código fuente, solo cambia el layer COPY . .. Las dependencias (pip install) quedan en caché y no se reinstalan. El build pasa de varios minutos a unos segundos.

Mal orden

Buen orden

Demostración: observar la caché

TIPEjercicio guiado — Observemos la caché en acción con dos builds sucesivos.

Paso 1: Crear el proyecto

bash
mkdir ~/demo-cache
cd ~/demo-cache

Crea requirements.txt:

bash
touch requirements.txt
nano requirements.txt

Construir y lanzar tu primera imagen

NOTEObjetivo — Construir tu primera imagen Docker a partir de un Dockerfile, lanzarla y comprender el papel del archivo .dockerignore.
WARNINGAntes de empezar — Este laboratorio supone que has seguido los módulos anteriores. Si encuentras conflictos de nombres, puertos ya en uso, o si Docker no responde correctamente, usa estos comandos para empezar de cero:
bash
# Arrêter TOUS les conteneurs en cours
docker stop $(docker ps -a -q)

# Supprimer TOUS les conteneurs
docker rm $(docker ps -a -q)

# Supprimer TOUTES les images (optionnel)
docker rmi $(docker images -q)

# Forcer la suppression si une image résiste
docker rmi -f $(docker images -q)
⚠ Atención — Estos comandos eliminan todo. Úsalos solo si quieres empezar desde un entorno limpio. La opción -f (force) elimina incluso las imágenes usadas por contenedores.

Objetivos pedagógicos

TIPAl finalizar este módulo — Serás capaz de dominar estas competencias esenciales.

Crear el proyecto

Paso 1: Crear la carpeta del proyecto

bash
mkdir ~/mon-premier-docker
cd ~/mon-premier-docker

Paso 2: Crear el script Python

Crea un archivo hello.py:

bash
touch hello.py
nano hello.py

Pega este contenido y guarda (Ctrl + O, Intro, Ctrl + X):

output
print("Bonjour depuis Docker !")
TIPTruco rápido — Puedes crear el archivo directamente desde la terminal:
bash
echo 'print("Bonjour depuis Docker !")' > hello.py

Verifica el contenido del archivo:

bash
cat hello.py

Paso 3: Crear el Dockerfile

Crea un archivo llamado Dockerfile (sin extensión):

bash
touch Dockerfile
nano Dockerfile

Pega este contenido y guarda (Ctrl + O, Intro, Ctrl + X):

output
FROM python:3.11-slim
WORKDIR /app
COPY hello.py .
CMD ["python", "hello.py"]
va-plus-loin

Este artículo cubre los extractos más útiles — el curso completo Docker Containerization (12 capítulos, 41 lecciones, ejercicios corregidos y proyecto final) te lleva hasta el final.

./acceder-au-cours-complet cours gratuit : Maîtriser Claude Code

FAQ

¿Cuánto tiempo se tarda en aprender Docker Containerization?
Con una progresión estructurada (12 capítulos, 41 lecciones cortas y prácticas), se alcanza un nivel operativo en unas semanas dedicando 30 a 60 minutos al día. Lo importante es practicar cada concepto de inmediato.
¿Se necesitan requisitos previos?
Basta con nociones básicas de informática. Si sabes usar un terminal y leer código sencillo, estás listo.
¿Por dónde empezar concretamente?
Reproduce los comandos de este artículo y sigue el curso completo Docker Containerization: encadena las 41 lecciones en orden, con ejercicios y proyecto final.

📬 ¿Quieres recibir este tipo de guía cada semana? Suscríbete gratis — código real, cero palabrería.