Las imágenes son uno de los conceptos fundamentales del ecosistema de contenedores.
Un contenedor no se construye desde cero cada vez que se ejecuta.
Siempre se crea a partir de una imagen.
Una imagen de contenedor es un paquete que contiene todo lo necesario para ejecutar una aplicación:
Podemos imaginar una imagen como:
👉 una plantilla o snapshot del sistema necesario para ejecutar una aplicación.
Cuando se lanza un contenedor, el motor de contenedores:
Es importante entender que imagen y contenedor no son lo mismo.
| Concepto | Descripción |
|---|---|
| Imagen | Plantilla inmutable |
| Contenedor | Instancia en ejecución de una imagen |
Esto significa que una misma imagen puede utilizarse para lanzar muchos contenedores diferentes.
Por ejemplo:
nginxweb-1, web-2, web-3Todos pueden ejecutarse a partir de la misma imagen.
Las imágenes no son un único archivo.
Están formadas por capas (layers).
Cada capa representa un cambio sobre la capa anterior.
Ejemplo simplificado:
Layer 1 → sistema base
Layer 2 → paquetes instalados
Layer 3 → aplicación
Layer 4 → archivos de configuración
Esto permite:
Por ejemplo, muchas imágenes diferentes pueden compartir la misma capa base.
Las imágenes normalmente no se almacenan dentro de los servidores donde se ejecutan.
Se almacenan en repositorios llamados registries.
Un registry es básicamente un repositorio de imágenes de contenedor.
Ejemplos habituales:
Cuando se ejecuta un contenedor, el motor de contenedores intenta descargar la imagen desde un registry.
Ejemplo:
docker run nginx
En este caso Docker descargará la imagen nginx desde Docker Hub si no existe localmente.
Las imágenes de contenedor utilizan un estándar llamado OCI (Open Container Initiative).
Gracias a este estándar:
pueden utilizar las mismas imágenes.
Esto permite que una imagen construida en un entorno pueda ejecutarse en muchos otros.
Además de utilizar imágenes públicas, también es posible crear imágenes propias.
Esto se hace mediante un archivo llamado Dockerfile.
Un Dockerfile describe paso a paso cómo construir una imagen.
Por ejemplo:
FROM nginx
COPY ./web /usr/share/nginx/html
Este Dockerfile indica:
nginxUna vez creado el Dockerfile, la imagen se construye con:
docker build
El resultado es una nueva imagen que se almacena localmente.
Posteriormente puede:
En entornos reales es habitual subir las imágenes a un registry.
Esto permite que:
El proceso habitual es:
Las imágenes permiten resolver uno de los problemas clásicos del software:
👉 "En mi ordenador funciona".
Al empaquetar la aplicación junto con su entorno:
Por este motivo las imágenes de contenedor son la base de plataformas modernas como Docker, Kubernetes y las arquitecturas cloud native.