Las imágenes son el punto de partida de todo lo que hacemos con Docker: cada contenedor nace de una imagen. Pero ¿de dónde salen esas imágenes? La respuesta es un registro (registry), un servicio que almacena y distribuye imágenes. El registro más conocido y usado por defecto es Docker Hub. En esta lección aprenderemos qué es Docker Hub, cómo distinguir las imágenes oficiales de las de la comunidad, cómo buscar y descargar imágenes con docker search y docker pull, la diferencia entre repositorios públicos y privados, qué papel juegan los tags y qué alternativas existen a Docker Hub. Entender el ecosistema de registros es esencial antes de aprender a construir nuestras propias imágenes.
¿Qué es un Registro y qué es Docker Hub?
Conviene separar tres conceptos que los principiantes suelen mezclar:
- Registro (registry): el servicio completo que aloja imágenes. Docker Hub es un registro, pero hay muchos más.
- Repositorio (repository): dentro de un registro, una colección de imágenes que comparten nombre pero se diferencian por su tag. Por ejemplo, el repositorio
nginxcontienenginx:1.25,nginx:alpine,nginx:latest, etc. - Imagen: una versión concreta dentro de un repositorio, identificada por su tag o por su digest.
Docker Hub es el registro público por defecto de Docker. Cuando ejecutas un comando como docker pull nginx sin especificar ningún registro, Docker asume Docker Hub automáticamente. Ofrece:
- Miles de imágenes listas para usar (bases de datos, lenguajes, servidores web, etc.).
- Repositorios públicos gratuitos y repositorios privados (con límites según el plan).
- Una interfaz web en
https://hub.docker.compara buscar, leer documentación y ver tags disponibles.
Imágenes Oficiales vs Imágenes de la Comunidad
No todas las imágenes de Docker Hub tienen la misma garantía de calidad. Es fundamental saber distinguirlas.
| Característica | Imágenes oficiales | Imágenes de la comunidad |
|---|---|---|
| Quién las mantiene | Equipo de Docker junto con los proyectos originales | Cualquier usuario u organización |
| Nombre en el pull | nginx, postgres, python (sin barra) |
usuario/imagen o organizacion/imagen |
| Revisión de seguridad | Curadas y auditadas | Variable; depende del autor |
| Documentación | Estandarizada y completa | Variable |
| Confianza recomendada | Alta | Verifícala antes de usar |
- Una imagen oficial se referencia con un único nombre sin barra:
ubuntu,redis,node. Internamente Docker las trata como pertenecientes al espaciolibrary/, por esoubuntuequivale alibrary/ubuntu. - Una imagen de la comunidad siempre incluye el nombre del usuario u organización seguido de una barra:
bitnami/postgresql,miempresa/api-pagos.
Regla práctica para principiantes: cuando exista una imagen oficial para lo que necesitas (un lenguaje, una base de datos), empieza por ella. Recurre a imágenes de la comunidad solo cuando aporten algo concreto, y revisa siempre quién las publica.
Buscar Imágenes con docker search
El comando docker search consulta Docker Hub desde la terminal, sin necesidad de abrir el navegador.
La salida muestra varias columnas:
NAME DESCRIPTION STARS OFFICIAL nginx Official build of Nginx. 19000 [OK] bitnami/nginx Bitnami nginx Docker Image 150 linuxserver/nginx An Nginx container... 180
Explicación de cada columna:
- NAME: el nombre del repositorio. Si no lleva barra, es oficial.
- DESCRIPTION: una breve descripción del propósito de la imagen.
- STARS: número de "estrellas" que le han dado los usuarios; sirve como indicador de popularidad.
- OFFICIAL: muestra
[OK]si se trata de una imagen oficial.
Puedes filtrar y limitar los resultados:
--filter is-official=true: muestra solo imágenes oficiales.--limit 5: limita la salida a los 5 primeros resultados.
Nota:
docker searchno muestra los tags disponibles. Para ver las versiones concretas de un repositorio, consulta su página enhub.docker.como usa la API del registro.
Descargar Imágenes con docker pull
Una vez identificada la imagen, docker pull la descarga a tu máquina local.
- Sin tag, Docker descarga el tag por defecto, que es
latest. Es decir,nginxequivale anginx:latest. - La imagen queda almacenada localmente y podrás usarla para crear contenedores sin volver a descargarla.
Para descargar una versión concreta, indica el tag tras dos puntos:
nginx: el repositorio.1.25-alpine: el tag, que aquí indica la versión 1.25 basada en Alpine Linux.
Durante la descarga verás cómo Docker baja varias capas por separado:
1.25-alpine: Pulling from library/nginx a2abf6c4d29d: Pull complete e3b6889c8954: Pull complete Digest: sha256:7e2c6... Status: Downloaded newer image for nginx:1.25-alpine
- Cada
Pull completecorresponde a una capa de la imagen. Docker descarga las capas en paralelo y reutiliza las que ya tenga en local. - El Digest (
sha256:...) es un identificador único y exacto del contenido de la imagen. A diferencia de un tag, que puede reasignarse, el digest siempre apunta al mismo contenido. Puedes usarlo para descargar una imagen de forma inmutable:
Repositorios Públicos y Privados
Un repositorio en Docker Hub puede ser público o privado:
| Tipo | Quién puede descargarlo | Caso de uso típico |
|---|---|---|
| Público | Cualquiera, sin autenticarse | Software de código abierto, imágenes compartidas |
| Privado | Solo usuarios autorizados tras docker login |
Imágenes internas de una empresa |
Para descargar de un repositorio privado primero hay que autenticarse:
- Te pedirá tu usuario y contraseña (o un token de acceso) de Docker Hub.
- Tras iniciar sesión, ya puedes hacer
pullde tus repositorios privados:
miusuario: el espacio de nombres (tu cuenta u organización).app-interna: el repositorio privado.1.0: el tag concreto.
Buena práctica de seguridad: en lugar de tu contraseña, usa un token de acceso personal generado en la configuración de Docker Hub. Puedes revocarlo en cualquier momento sin cambiar tu contraseña principal, y es lo recomendado en entornos automatizados como pipelines de integración continua.
Tags en el Registro
Un tag es una etiqueta legible que identifica una versión dentro de un repositorio. Es lo que escribes después de los dos puntos: repositorio:tag.
| Ejemplo de referencia | Significado |
|---|---|
redis |
Repositorio redis, tag implícito latest |
redis:7.2 |
Versión 7.2 |
redis:7.2-alpine |
Versión 7.2 sobre Alpine Linux |
redis:latest |
El tag marcado como "último" por el mantenedor |
Puntos clave que debes entender sobre los tags:
latestno significa "la versión más reciente garantizada": es simplemente el tag por defecto. Es el mantenedor quien decide a qué imagen apuntalatest, y puede no estar actualizado. Por eso en producción conviene fijar versiones explícitas (redis:7.2) en lugar de confiar enlatest.- Un tag es mutable: el mantenedor puede reasignar
redis:7.2a una imagen nueva. Si necesitas una garantía absoluta de inmutabilidad, usa el digest (@sha256:...). - Las variantes como
-alpine,-slimo-bookwormindican el sistema base sobre el que se construyó la imagen, lo que afecta a su tamaño y compatibilidad.
Alternativas a Docker Hub
Docker Hub no es el único registro. En entornos profesionales es muy común usar otros, ya sea por integración con la nube, por privacidad o por evitar los límites de descarga de Docker Hub.
| Registro | Proveedor | Caso de uso habitual |
|---|---|---|
| Docker Hub | Docker | Imágenes públicas y registro por defecto |
| Amazon ECR | AWS | Proyectos alojados en AWS |
| Google Artifact Registry | Google Cloud | Proyectos en Google Cloud |
| Azure Container Registry | Microsoft Azure | Proyectos en Azure |
GitHub Container Registry (ghcr.io) |
GitHub | Imágenes vinculadas a repositorios de GitHub |
| Harbor | Código abierto (autohospedado) | Registro privado bajo tu control |
Para usar un registro distinto de Docker Hub, basta con incluir su dominio al principio de la referencia de la imagen:
ghcr.io: el dominio del registro (GitHub Container Registry).miorganizacion/miservicio: el repositorio dentro de ese registro.2.1: el tag.
Cuando no se indica ningún dominio, Docker asume docker.io (Docker Hub) de forma implícita.
Errores Comunes y Consejos
- Confundir registro, repositorio e imagen: el registro es el servidor, el repositorio es la colección de versiones y la imagen es una versión concreta.
- Confiar ciegamente en
latest: en producción fija siempre una versión explícita para builds reproducibles. - Usar imágenes de la comunidad sin verificarlas: revisa el autor, las estrellas, la fecha de actualización y la documentación antes de confiar en una imagen ajena.
- No autenticarse antes de un pull privado: si olvidas
docker login, Docker devolverá un error de acceso denegado o "repositorio no encontrado". - Esperar que
docker searchliste tags: no lo hace; consulta la web del registro para ver las versiones disponibles. - Consejo: para garantizar inmutabilidad total (por ejemplo, en despliegues críticos), referencia la imagen por su digest
@sha256:...en lugar de por tag.
Ejercicios
Ejercicio 1
Busca la imagen oficial de PostgreSQL en Docker Hub desde la terminal, mostrando solo imágenes oficiales y un máximo de 3 resultados.
Ejercicio 2
Descarga la versión 16 de PostgreSQL basada en Alpine. Indica qué partes de la referencia son el repositorio y cuál el tag.
Ejercicio 3
Explica la diferencia entre descargar redis:7.2 y redis@sha256:abc123..., y en qué situación usarías cada una.
Soluciones
Solución 1
La opción --filter is-official=true restringe la búsqueda a imágenes oficiales y --limit 3 muestra como máximo tres resultados. La imagen oficial aparecerá con [OK] en la columna OFFICIAL.
Solución 2
postgreses el repositorio (imagen oficial, sin barra).16-alpinees el tag: versión 16 construida sobre Alpine Linux, una base mínima que reduce el tamaño de la imagen.
Solución 3
redis:7.2usa un tag, que es mutable: el mantenedor podría reasignarlo a otra imagen en el futuro. Es cómodo y legible para uso habitual.redis@sha256:abc123...usa un digest, que es inmutable: siempre apunta exactamente al mismo contenido. Se usa cuando necesitas reproducibilidad absoluta, por ejemplo en despliegues de producción auditables o firmados.
Conclusión
En esta lección hemos explorado el ecosistema de registros de Docker: qué es Docker Hub, cómo se diferencian las imágenes oficiales de las de la comunidad, cómo buscar con docker search y descargar con docker pull, la distinción entre repositorios públicos y privados, el papel de los tags y el digest, y las principales alternativas a Docker Hub. Con esto ya sabes localizar y traer a tu máquina cualquier imagen que necesites.
En la siguiente lección, Construyendo Imágenes Docker, daremos el salto de consumir imágenes ajenas a crear las nuestras propias: veremos el comando docker build, el contexto de construcción, su relación con el Dockerfile y cómo aprovechar la caché de capas para builds rápidas.
Docker: De Principiante a Avanzado
Módulo 1: Introducción a Docker
- ¿Qué es Docker?
- Instalando Docker
- Arquitectura de Docker
- Comandos Básicos de Docker
- Entendiendo las Imágenes de Docker
- Creando tu Primer Contenedor Docker
Módulo 2: Trabajando con Imágenes Docker
- Docker Hub y Repositorios
- Construyendo Imágenes Docker
- Conceptos Básicos de Dockerfile
- Gestionando Imágenes Docker
- Etiquetado y Publicación de Imágenes
Módulo 3: Contenedores Docker
- Ejecutando Contenedores
- Ciclo de Vida del Contenedor
- Gestionando Contenedores
- Redes en Docker
- Persistencia de Datos con Volúmenes
Módulo 4: Docker Compose
- Introducción a Docker Compose
- Definiendo Servicios en Docker Compose
- Comandos de Docker Compose
- Aplicaciones Multi-Contenedor
- Variables de Entorno en Docker Compose
Módulo 5: Conceptos Avanzados de Docker
- Profundización en Redes Docker
- Opciones de Almacenamiento Docker
- Mejores Prácticas de Seguridad en Docker
- Optimizando Imágenes Docker
- Registro y Monitoreo en Docker
Módulo 6: Docker en Producción
- CI/CD con Docker
- Orquestando Contenedores con Docker Swarm
- Introducción a Kubernetes
- Desplegando Contenedores Docker en Kubernetes
- Escalado y Balanceo de Carga
