Aprende Docker → Lección 9
Una imagen que solo existe en tu máquina no sirve para desplegar. El registro es el sitio común del que todos los entornos descargan, y cómo se etiquete ahí determina si el despliegue es trazable o un acto de fe.
Una imagen, dos nombres
Etiquetar no copia nada: crea otro nombre para la misma imagen. Lo habitual es poner dos, el identificador del commit y latest:
docker tag mi-app:local registro.ejemplo.com/mi-app:2bbc62e docker tag mi-app:local registro.ejemplo.com/mi-app:latest docker images registro.ejemplo.com/mi-app
salidaregistro.ejemplo.com/mi-app:2bbc62e af364ec01e89 112kB registro.ejemplo.com/mi-app:latest af364ec01e89 112kB
Mira la columna del identificador: af364ec01e89 en las dos. No hay dos imágenes de 112 kB, hay una con dos etiquetas. Por eso etiquetar es instantáneo y no ocupa espacio.
Publicar y comprobar
docker login registro.ejemplo.com docker push registro.ejemplo.com/mi-app:2bbc62e docker push registro.ejemplo.com/mi-app:latest
El segundo envío es casi instantáneo: las capas ya están en el registro y solo se añade la etiqueta. Un registro expone una API para consultar lo que contiene:
curl .../v2/_catalog{"repositories":["mi-app"]}
curl .../v2/mi-app/tags/list{"name":"mi-app","tags":["2bbc62e","latest"]}
El digest: la identidad de verdad
Las etiquetas se pueden mover. El digest es la huella criptográfica del contenido y no se puede falsificar ni reutilizar:
docker inspect --format '{{index .RepoDigests 0}}' registro.ejemplo.com/mi-app:2bbc62e
salidaregistro.ejemplo.com/mi-app@sha256:af364ec01e892e4343bb8285decc972be1e461d96e62d072e72dcc8fe3ffc6c0
Y se puede descargar y ejecutar por ese digest, sin pasar por ninguna etiqueta:
docker pull registro.ejemplo.com/mi-app@sha256:af364ec0...
salidahola desde una imagen mínima
latest no es una versión. No significa «la más reciente» ni «la estable»: es solo la etiqueta que Docker asume cuando no escribes ninguna, y apunta a lo último que alguien subió con ese nombre. Si producción arranca mi-app:latest, nadie puede responder con certeza qué código está corriendo, y volver atrás es imposible porque la etiqueta anterior ya no existe. Para desplegar hay que usar una etiqueta inmutable; latest vale como comodidad en desarrollo y nada más.Qué poner en la etiqueta
| Esquema | Cuándo |
|---|---|
2bbc62e, el commit corto |
El más práctico: enlaza la imagen con el código exacto |
1.4.2, versión semántica |
Para bibliotecas y productos con publicaciones formales |
2026-10-02-1430 |
Si no hay control de versiones de por medio |
qa, produccion |
Evítalo: etiquetas móviles, mismo problema que latest |
latest |
Solo como alias de conveniencia |
mi-app:2bbc62e, mi-app:1.4.2 y mi-app:latest, las tres apuntando al mismo digest. Cada una sirve a un lector distinto: el commit para depurar, la versión para documentar y latest para quien solo quiere probar. Lo que no debe hacerse es desplegar por las dos últimas.Dónde publicar
| Registro | Para qué |
|---|---|
| Docker Hub | Imágenes públicas; con límites de descarga para anónimos |
| GitHub Container Registry | Cómodo si el código ya está en GitHub |
| El del proveedor en la nube | Cuando el despliegue ocurre allí mismo |
registry:3 autoalojado |
Un contenedor; suficiente para una red interna |