Una imagen de Docker es una plantilla de solo lectura que contiene todo lo necesario para ejecutar una aplicación: código, dependencias y configuración.
La diferencia entre tener el molde y tener el pastel
Imagina que trabajas en el área de tecnología de Liverpool. Tu equipo necesita desplegar la misma aplicación web en cinco servidores distintos. Sin Docker, instalarías manualmente cada dependencia en cada servidor. Con una imagen de Docker, usas un solo molde para crear cinco instancias idénticas en minutos.
Aquí está la distinción más importante de esta lección: una imagen es el molde, y un contenedor es el objeto que fabricas con ese molde. Puedes crear cien contenedores a partir de una sola imagen. Todos arrancan exactamente igual.
La imagen no cambia cuando el contenedor corre. Es inmutable. El contenedor sí puede cambiar durante su ejecución, pero la imagen queda intacta.
El sistema MOLDE-INSTANCIA
Para entender imágenes y contenedores de forma permanente, usa el sistema MOLDE-INSTANCIA:
- MOLDE = imagen de Docker. Se construye una vez, se reutiliza siempre.
- INSTANCIA = contenedor. Nace de la imagen, vive, y puede detenerse o eliminarse.
Piénsalo como una receta de Bimbo para hacer pan de caja. La receta (imagen) no desaparece cuando horneas un pan (contenedor). Puedes hornear mil panes con la misma receta. Si uno sale mal, tiras ese pan, no la receta.
Este sistema tiene tres ventajas concretas:
- Consistencia: todos los contenedores creados desde la misma imagen son idénticos.
- Velocidad: crear un contenedor desde una imagen tarda segundos, no minutos.
- Portabilidad: la imagen funciona igual en tu laptop, en un servidor de FEMSA o en la nube.
¿Qué contiene una imagen por dentro?
Una imagen de Docker está formada por capas. Cada capa agrega algo sobre la anterior. Es como construir una torta: primero el pan, luego el jamón, luego el queso.
Por ejemplo, una imagen de Node.js típica tiene estas capas:
- Sistema operativo base (como Debian o Alpine Linux)
- Runtime de Node.js instalado
- Dependencias de tu aplicación (
npm install) - El código fuente de tu app
Cada vez que construyes una nueva versión de tu imagen, Docker solo reconstruye las capas que cambiaron. Esto hace las actualizaciones muy rápidas.
Docker Hub: el repositorio de imágenes
Docker Hub es la tienda oficial de imágenes de Docker. Es gratuita para imágenes públicas. Vive en hub.docker.com.
Puedes buscar imágenes directamente desde la terminal con este comando:
docker search nginx
Verás una lista así:
NAME DESCRIPTION STARS
nginx Official build of Nginx. 19000
bitnami/nginx Bitnami Nginx Docker Image 180
jc21/nginx-proxy-... Docker powered web proxy 3500
Las imágenes con la etiqueta OFFICIAL son mantenidas directamente por los creadores del software o por Docker. Siempre prefiere las imágenes oficiales cuando empieces a aprender.
Descargar una imagen sin ejecutarla
A veces necesitas descargar una imagen para usarla después, sin crear un contenedor todavía. El comando es:
docker pull nginx
Verás una salida como esta:
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
Digest: sha256:abc123...
Status: Downloaded newer image for nginx:latest
Cada línea con "Pull complete" es una capa de la imagen descargándose. Una vez descargada, la imagen vive en tu máquina local.
Para ver todas las imágenes que tienes descargadas:
docker images
Salida esperada:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest a99a39d070bf 2 weeks ago 142MB
Ejecutar un contenedor desde una imagen
Ahora viene la parte práctica. Vamos a levantar un servidor web Nginx con un solo comando:
docker run -d -p 8080:80 --name mi-servidor nginx
Desglosamos cada parte:
docker run: crea y arranca un contenedor-d: modo "detached", corre en segundo plano-p 8080:80: mapea el puerto 8080 de tu máquina al puerto 80 del contenedor--name mi-servidor: le da un nombre fácil de recordar al contenedornginx: el nombre de la imagen que usará
Ahora abre tu navegador y visita http://localhost:8080. Deberías ver la página de bienvenida de Nginx. Levantaste un servidor web completo en menos de 10 segundos.
Tres ejemplos que puedes copiar ahora mismo
Ejemplo 1: Servidor web para un proyecto de e-commerce
Supón que desarrollas el catálogo de productos de una tienda similar a Mercado Libre. Necesitas un servidor web para pruebas locales:
docker run -d -p 3000:80 --name catalogo-local nginx
Visita http://localhost:3000 y tienes tu entorno listo.
Ejemplo 2: Base de datos MySQL para desarrollo
Tu equipo necesita una base de datos temporal para probar reportes de ventas:
docker run -d \
-p 3306:3306 \
--name db-ventas \
-e MYSQL_ROOT_PASSWORD=mipassword \
mysql:8.0
En segundos tienes MySQL 8.0 corriendo localmente. Sin instaladores, sin configuraciones largas.
Ejemplo 3: Aplicación Python simple
Tienes un script de Python que procesa nóminas de empleados. Quieres correrlo sin instalar Python en tu máquina:
docker run --rm python:3.11 python -c "print('Nómina procesada correctamente')"
El flag --rm elimina el contenedor automáticamente al terminar. Perfecto para tareas de una sola vez.
Errores comunes al usar imágenes
Error 1: Confundir imagen con contenedor
Muchos principiantes intentan "eliminar una imagen" cuando en realidad quieren eliminar un contenedor. Si corres docker rmi nginx pero tienes contenedores activos usando esa imagen, Docker te dará error. Primero detén y elimina el contenedor, luego borra la imagen.
docker stop mi-servidor
docker rm mi-servidor
docker rmi nginx
Error 2: No especificar la versión (tag) de la imagen
Cuando escribes solo nginx, Docker descarga la versión latest. En producción esto es peligroso porque latest cambia con el tiempo. Siempre especifica la versión en proyectos reales:
docker pull nginx:1.25
Así tu equipo de desarrollo y el servidor de producción usan exactamente la misma versión.
Error 3: Descargar imágenes no oficiales sin verificar
Docker Hub tiene millones de imágenes públicas. Algunas son de terceros no verificados. Antes de usar una imagen desconocida, revisa cuántas descargas tiene, si tiene el badge de "Docker Official Image" y cuándo fue la última actualización. Usa imágenes con más de 1 millón de descargas o el sello oficial.
Cómo ver los detalles de una imagen
Puedes inspeccionar una imagen para ver su configuración interna:
docker inspect nginx
Este comando muestra un JSON con toda la información: capas, variables de entorno, puertos expuestos y más. Al principio se ve intimidante, pero con el tiempo aprenderás a leer la información que necesitas.
También puedes ver el historial de capas con:
docker history nginx
Verás cada capa con su tamaño y el comando que la creó. Esto te ayuda a entender cómo está construida la imagen.
Tu flujo de trabajo con imágenes
Sigue este flujo cada vez que necesites usar una imagen nueva:
- Busca la imagen en Docker Hub o con
docker search - Verifica que sea oficial o tenga buena reputación
- Descarga con
docker pull nombre:version - Confirma la descarga con
docker images - Ejecuta un contenedor con
docker run - Verifica que el contenedor corre con
docker ps
Este flujo de seis pasos aplica igual si desarrollas en tu laptop en Ciudad de México o si despliegas en un servidor en Monterrey.
Una imagen de Docker es la garantía de que tu aplicación corre igual en cualquier lugar: la consistencia que todo equipo de desarrollo necesita.