Antes, para correr una aplicación, tenías que instalar el sistema operativo, luego las librerías, luego la app... y rezar para que las versiones coincidieran. Docker empaqueta todo en una "caja" (contenedor) que corre igual en cualquier sitio.
Imagen vs Contenedor
Una Imagen es como la receta o el plano. Un Contenedor es la tarta o la casa construida. Puedes tener 100 contenedores corriendo desde 1 sola imagen.
Tu Primer Dockerfile
FROM python:3.9
WORKDIR /app
COPY . .
CMD ["python", "app.py"]
Con estas 4 líneas, has creado un entorno Python reproducible en cualquier lugar del mundo.