Como usar los repositorios ECR en AWS

Hello word 🙂
En la entrada de hoy vamos a hablar de un servicio muy usado dentro del ecosistema de AWS cuando trabajamos con contenedores: Amazon ECR (Elastic Container Registry).
ECR nos permite alojar, versionar y consumir imágenes Docker desde repositorios privados (y también públicos), con integración nativa con servicios como EKS, ECS, entre otros. Al ser un servicio administrado, AWS se encarga del mantenimiento, la disponibilidad y el escalado cuando sea necesario.
Una de las ventajas que más aprovecho en mi día a día es poder “replicar” imágenes públicas en un repositorio privado de ECR. Esto es especialmente útil cuando trabajamos en entornos 100% privados (sin salida a Internet), donde no podemos hacer docker pull directamente desde DockerHub u otros registries públicos.
En esta entrada veremos, de forma rápida, cómo traer una imagen pública y publicarla en ECR usando AWS CloudShell, ya que viene con AWS CLI y Docker listos para usar, lo que simplifica muchísimo el proceso.
Requisitos
-
Una cuenta de AWS
-
Permisos para crear repositorios y subir imágenes en ECR.
1- Exportar variables y autenticarse en ECR
Define las variables que vas a usar. Asegúrate de incluir tu AWS_ACCOUNT_ID y AWS_REGION.
AWS_ACCOUNT_ID="123456789012"
AWS_REGION="eu-west-2"
# Imagen origen (pública)
FULL_REGISTRY_PATH="ubuntu:jammy"
# Destino en ECR
ECR_REPO="ubuntu"
TAG="jammy"
aws ecr get-login-password --region "$AWS_REGION" \
| docker login --username AWS --password-stdin \
"$AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com"
2- Descargar (pull) la imagen pública
docker pull "$FULL_REGISTRY_PATH"
3- Crear el repositorio en ECR (si no existe)
aws ecr describe-repositories --repository-names "$ECR_REPO" --region "$AWS_REGION" >/dev/null 2>&1 \
|| aws ecr create-repository --repository-name "$ECR_REPO" --region "$AWS_REGION"
4- Etiquetar y subir (push) la imagen a ECR
Primero etiquetamos la imagen con el destino en ECR:
docker tag "$FULL_REGISTRY_PATH""$AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECR_REPO:$TAG"
Luego la subimos:
docker push "$AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECR_REPO:$TAG"
Verificación y uso en EKS
Una vez finalizado el push, verás el repositorio ubuntu en ECR con el tag jammy. Desde ahí puedes copiar el URI de la imagen y usarlo en tus Deployments, por ejemplo:
En un clúster de EKS, esto funcionará sin problemas siempre que tus worker nodes (o tus pods mediante IRSA + ECR, según el enfoque) tengan permisos para autenticarse y descargar imágenes desde ECR.
Conclusión
Con estos pasos puedes usar imágenes públicas dentro de entornos privados sin complicaciones: mantienes el control de versiones, reduces dependencias externas y mejoras la postura de seguridad al consumir imágenes desde un registry bajo tu administración.
En este ejemplo usamos una imagen de DockerHub, pero el mismo flujo aplica para otros registries públicos (e incluso privados) cuando, por políticas o restricciones de red, necesitas “internalizar” las imágenes dentro de tu cuenta y tus repositorios de ECR.
Por último, otra funcionalidad muy interesante de ECR —especialmente útil en entornos privados— son las Pull Through Cache Rules, que te permiten cachear imágenes de registries externos dentro de ECR para acelerar descargas y reducir dependencias de salida a Internet. En una entrada futura podemos armar un caso de uso completo para aprovechar esta característica.






