Concepto clave
Un Docker Registry es un sistema de almacenamiento y distribución de imágenes Docker. Piensa en él como un repositorio centralizado, similar a GitHub para código fuente, pero para imágenes de contenedores. Cuando construyes una imagen con docker build, puedes subirla (push) a un registry y luego descargarla (pull) desde cualquier otro entorno, como un servidor de producción o el equipo de un colega.
El registry más conocido es Docker Hub, pero también existen alternativas privadas como Amazon ECR, Google Container Registry o GitHub Container Registry. Usar un registry es esencial para integrar Docker en flujos de CI/CD, ya que permite versionar imágenes, controlar accesos y automatizar despliegues.
Una imagen se identifica por su nombre y etiqueta (tag). Por ejemplo, mi-app:1.0.0. El nombre suele incluir el repositorio, como usuario/mi-app. Las etiquetas permiten versionar y gestionar lanzamientos. Una buena práctica es usar etiquetas semánticas (1.0.0, 1.0.1) y evitar la etiqueta latest en producción porque es ambigua.
Cómo funciona en la práctica
Para usar un registry, primero debes autenticarte. Con Docker Hub, ejecutas docker login y proporcionas tus credenciales. Luego, etiquetas tu imagen local con el nombre del registry y el repositorio deseado:
docker tag mi-app:1.0.0 usuario/mi-app:1.0.0Después, subes la imagen:
docker push usuario/mi-app:1.0.0En el servidor de producción, autenticas (si es privado) y ejecutas:
docker pull usuario/mi-app:1.0.0
docker run -d -p 80:80 usuario/mi-app:1.0.0Este flujo se automatiza en CI/CD: tras cada commit, el pipeline construye la imagen, la etiqueta con el número de versión (o commit SHA) y la sube al registry. Luego, un sistema de orquestación como Kubernetes o Docker Swarm la descarga y despliega.
Código en acción
Vamos a crear un ejemplo completo: construir una imagen simple, subirla a Docker Hub y luego descargarla en otro lugar. Primero, crea un archivo Dockerfile:
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.htmlCrea un index.html con contenido básico. Luego, construye y etiqueta:
docker build -t mi-web:1.0.0 .
docker tag mi-web:1.0.0 tucuenta/mi-web:1.0.0Autentica y sube:
docker login
docker push tucuenta/mi-web:1.0.0Para verificar, puedes eliminar la imagen local y descargarla:
docker rmi tucuenta/mi-web:1.0.0
docker pull tucuenta/mi-web:1.0.0
docker run -d -p 8080:80 tucuenta/mi-web:1.0.0Ahora visita http://localhost:8080 y deberías ver tu página.
Errores comunes
- No autenticarse antes de hacer push: Recibirás un error de denegación de acceso. Solución: ejecuta
docker loginprimero. - Usar la etiqueta
latesten producción: Dificulta el rollback y la trazabilidad. Solución: usa etiquetas semánticas o el SHA del commit. - Olvidar etiquetar la imagen con el nombre del registry: El push falla porque Docker no sabe a dónde subir. Solución: siempre etiqueta con
usuario/repo:tag. - Subir imágenes con información sensible (contraseñas, tokens): Quedan expuestas en el registry. Solución: usa variables de entorno o secretos en tiempo de ejecución, no en la imagen.
- No limpiar imágenes antiguas del registry: Ocupan espacio y aumentan costos. Solución: implementa políticas de retención o borra manualmente versiones obsoletas.
Checklist de dominio
- Autenticarse en un registry (Docker Hub, ECR, etc.)
- Etiquetar una imagen local con el formato
usuario/repositorio:tag - Subir una imagen al registry con
docker push - Descargar una imagen desde el registry con
docker pull - Verificar que la imagen subida aparece en la interfaz web del registry
- Usar etiquetas semánticas en lugar de
latestpara versiones de producción - Automatizar push y pull en un pipeline de CI/CD
Publicar y consumir una imagen Docker en un registry público
Objetivo: Crear una imagen Docker simple, subirla a Docker Hub y luego descargarla en otro equipo (o el mismo) para verificar su funcionamiento.
- Crea una cuenta en Docker Hub si no tienes una.
- En tu máquina local, crea un directorio llamado
ejercicio-registry. - Dentro, crea un archivo
Dockerfilecon el siguiente contenido:FROM alpine:latest CMD ["echo", "Hola desde mi imagen publicada"] - Construye la imagen con el tag
tu-usuario/mi-primera-imagen:1.0.0(reemplazatu-usuariopor tu nombre de usuario de Docker Hub). - Autentícate en Docker Hub con
docker login. - Sube la imagen al registry con
docker push. - Verifica en la interfaz web de Docker Hub que la imagen aparece en tu repositorio.
- Elimina la imagen local con
docker rmi. - Descarga la imagen desde Docker Hub con
docker pull. - Ejecuta un contenedor con la imagen descargada y verifica que imprime el mensaje.
Entregable: Captura de pantalla mostrando el output del comando docker run que imprime "Hola desde mi imagen publicada".
Rúbrica de evaluación:
- La imagen se subió correctamente (visible en Docker Hub) - 25%
- La imagen se descargó y ejecutó sin errores - 25%
- El mensaje esperado se mostró en la salida - 25%
- Se usó una etiqueta semántica (no
latest) - 25%
- Asegúrate de que el tag incluya tu nombre de usuario de Docker Hub, por ejemplo:
tu-usuario/mi-primera-imagen:1.0.0. - Si el push falla con 'denied', verifica que hayas ejecutado
docker loginy que el repositorio exista en Docker Hub (puede crearse automáticamente al hacer push). - Para verificar que la imagen se eliminó correctamente, usa
docker imagesantes del pull.