Jugando con Amazon ECR

Introducción

Elastic Container RegistryECR – es el servicio de registro y repositorio de imágenes Docker propio de Amazon.

ECR se puede usar desde dentro de medios de Amazon, como EC2 o EKS. Y también desde fuera, con Docker CLI. Pero en todos los casos, el acceso a ECR se hace usando un token de autorización.

Requisitos previos

El primer requisito es crear un usuario con permisos, como se indica en la primera parte de la guía oficial. Después, conviene tener instaladas las herramientas de la AWS CLI, ya que los usaré en este artículo.

Creación de un repositorio

Usando la consola de ECR

Un repositorio es el lugar donde se van a guardar todas las versiones y etiquetas (tags) de una misma imagen. Es decir, hay una correspondencia uno a uno entre repositorio y aplicación contenerizada.

Se pueden usar separaciones con / en el nombre de los repositorios, para crear jerarquías y espacios de nombres. En la consola de AWS, en la sección Servicios, buscamos por ECR:

Esto abre la consola de administración de ECR. Ahora, pulsamos en Create repository y completamos el formulario que se abre:

Hecho eso, se habrá creado un repositorio nuevo. Podemos configurar si:

  • Se van a escanear las imágenes nueva cada vez que se suban
  • Se permite o prohíbe sobreescribir las imágenes con un tag

Sobreescribir imágenes con tag rompe el versionado de aplicaciones. Debería permitirse únicamente, si acaso, durante el desarrollo y pruebas iniciales de una misma versión.

La URI del repositorio es la que se usará para hacer login en él. Se compone del campo Account de la identidad de la cuenta, de la zona y del nombre del repositorio.

Usando AWS CLI

Si tenemos AWS CLI instalado, usarlo para esto es muy sencillo. Por ejemplo, para crear el repo myapps/redisen Irlanda:

aws ecr create-repository \    
  --repository-name myapps/redis \
  --image-scanning-configuration scanOnPush=true \
  --region eu-west-1

Eliminación de un repositorio

Eliminar un repositorio provoca la eliminación de todas las imágenes que contiene.

Usando la consola

Es trivial. Sólo hay que entrar en la consola, marcar el repositorio y pulsar en Delete.

Usando AWS CLI

Sería tan sencillo como esto:

aws ecr delete-repository \ 
  --repository-name myapps/redis \ 
  --force

También se puede eliminar una imagen y tag concretos:

aws ecr batch-delete-image \ 
  --repository-name myapps/redis \ 
  --image-ids imageTag=1.0.0

Uso del repositorio con Docker CLI

Un repositorio de imágenes de ECR es como otro cualquiera. Para usarlo hay que:

  • Hacer login en él con Docker
  • Etiquetar las imágenes con la URI del repositorio, para poder subirlas a él
  • Usar esa URI, para poder descargarlas

Login en ECR

Para hacer login, hay que obtener un token de acceso general a ECR que da AWS para el usuario configurado en AWS CLI. Después, se hace un login normal y corriente con Docker CLI.

En Linux, o Windows con una shell Linux (como GitBash):

aws --region <region> ecr get-login-password \
  | docker login \
      --password-stdin \
      --username AWS "<account>.dkr.ecr.<region>.amazonaws.com/<repo>"

En Windows con CMD:

C:\> aws --region <region> ecr get-login-password eyJwYXlsb2FkIjoiTWYrY0F0NVl...etc, etc... 
C:\> docker login --password-stdin <el token de antes> --username AWS "<account>.dkr.ecr.<region>.amazonaws.com/<repo>"

No es necesario usar --region pero sí puede serlo si tenemos ECRs creados en varias regiones.

Hecho el login, Docker queda configurado ya para poder utilizarlo.

Si al hacer login da un error 400 Bad Request, puede ser por lo siguiente:

  • No hemos indicado la región cuando sí que hacía falta
  • La URI del repo está mal, por ejemplo porque no esté indicado el nombre del repo
  • El id de la cuenta no sea correcto o no sea el adecuado

Subida de imágenes

Se hace de forma convencional, etiquetando la imagen usando la URI del repositorio. Por ejemplo, si tenemos la imagen redis en local, primero la etiquetamos para usar el repositorio que tenga asociado, es decir, a donde la queremos subir:

docker tag redis:latest <account>.dkr.ecr.<region>.amazonaws.com/myapps/redis:latest

Donde myapps/redis es el repositorio en ECR.

El repositorio debe existir previamente y no se crea automáticamente, sólo a mano como antes.

Ahora, para subir la imagen:

docker push <account>.dkr.ecr.<region>.amazonaws.com/myapps/redis:latest

Descarga de imágenes

Funciona exactamente igual que siempre. En nuestro ejemplo, sería así:

docker pull <account>.dkr.ecr.<region>.amazonaws.com/myapps/redis:latest

Eliminación de imágenes

Se puede hacer tanto desde la consola de ECR como por línea de comandos. En el ejemplo, sería ejecutando:

aws ecr batch-delete-image \ 
  --repository-name myapps/redis \ 
  --image-ids imageTag=latest

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.