¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Qué es un contenedor

La lección completa está aquí para leer. Crea una cuenta gratuita para ejecutar sus comandos en un laboratorio y hacer sus cuestionarios y tareas.

Lección de 50 minSin comandos

En mi ordenador funciona

Lucía trabaja en una tienda online de ropa en Valencia. Prepara un cambio en la web y lo prueba en su portátil. Todo va bien.

El lunes el cambio llega al servidor y la página de pago falla. El servidor tiene una versión antigua de Python.

Lucía dice la frase más repetida del sector: "En mi ordenador funciona". Esta lección explica cómo se evita.

Al final de esta lección

Nota

Puedo explicar qué es un contenedor y por qué lo usan los equipos.

Palabras clave

PalabraQué significaEjemplo
Dependenciaun programa que tu aplicación necesita para funcionarflask 3.0
Imagenun paquete con la aplicación y todo lo que necesita
Contenedoruna imagen en marcha, aislada del resto del equipo
Dockerfileel archivo de instrucciones para crear una imagen
Registroun almacén de imágenes en la red

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Dos equipos casi iguales no son iguales

Una aplicación nunca va sola. Necesita un lenguaje, unas librerías y algunos ajustes del sistema. Cada una de esas piezas es una dependencia.

Si el portátil y el servidor tienen versiones distintas, la aplicación puede fallar en uno y no en el otro.

Ejecuta el bloque siguiente. Compara las dependencias de los dos equipos de Lucía.

Comparar el portátil y el servidor

Código: bash
mkdir -p tienda && cd tienda
printf 'python 3.12\nflask 3.0\npillow 10.4\n' > portatil.txt
printf 'python 3.8\nflask 2.0\npillow 10.4\n' > servidor.txt

# diff enseña las líneas que no coinciden entre los dos equipos
diff portatil.txt servidor.txt && echo "Los dos equipos son iguales"

# Cambia servidor.txt para que use python 3.12 y flask 3.0,
# vuelve a pulsar Ejecutar y lee el mensaje final.

Una imagen lleva la aplicación y sus dependencias

La solución es empaquetar la aplicación junto con todas sus dependencias. Ese paquete se llama imagen.

La receta de la imagen se escribe en un Dockerfile. Cada línea es una instrucción: de qué sistema partir, qué instalar, qué copiar y cómo arrancar.

Cuando la imagen se pone en marcha, tienes un contenedor. Es la misma imagen en el portátil y en el servidor.

Leer un Dockerfile

Código: bash
mkdir -p tienda && cd tienda
cat > Dockerfile <<'FIN'
# La imagen base: un sistema pequeño con Python 3.12 ya instalado
FROM python:3.12-slim
WORKDIR /app
# Primero las dependencias, luego el código
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "app.py"]
FIN

# Cuenta las instrucciones: cada línea que empieza en mayúsculas
grep -c '^[A-Z]' Dockerfile
grep '^FROM' Dockerfile

Tres órdenes de Docker muy habituales

Docker es la herramienta de contenedores más usada. Este entorno no tiene Docker, así que aquí tienes una salida real.

docker build crea la imagen y le pone un nombre con versión. docker run arranca un contenedor. docker ps lista los contenedores en marcha.

Construir, arrancar y listar

Código: bash
$ docker build -t tienda:1.4 .
 => [1/5] FROM python:3.12-slim
 => [3/5] RUN pip install -r requirements.txt
 => naming to docker.io/library/tienda:1.4

$ docker run -d -p 8000:8000 tienda:1.4
3f9c1a7e52b0

$ docker ps
CONTAINER ID   IMAGE        STATUS         PORTS
3f9c1a7e52b0   tienda:1.4   Up 8 seconds   0.0.0.0:8000->8000/tcp

Un error frecuente

Advertencia

Mucha gente cree que un contenedor es una máquina virtual pequeña. No lo es. Una máquina virtual lleva su propio sistema operativo completo. Un contenedor comparte el sistema del equipo y solo aísla la aplicación. Por eso arranca en segundos.

Máquina virtual y contenedor

Máquina virtualContenedor
Sistema operativoUno propio, completoComparte el del equipo
Tamaño habitualVarios GBDecenas o cientos de MB
Tiempo de arranqueMinutosSegundos
Uso típicoSeparar sistemas enterosEmpaquetar una aplicación

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.