Envía y extrae imágenes

En esta página, se describe cómo enviar y extraer imágenes de contenedor con Docker. También proporciona información para extraer imágenes con la herramienta crictl si estás solucionando problemas en Google Kubernetes Engine.

Para obtener información sobre la implementación en entornos de ejecución de Trusted Cloud by S3NS , consulta Implementa en Trusted Cloud.

Para obtener instrucciones sobre cómo enumerar, etiquetar y borrar imágenes, consulta Administra imágenes.

Antes de comenzar

  1. Si el repositorio de destino no existe, crea un repositorio nuevo.
  2. Debes tener al menos el acceso de escritor de Artifact Registry al repositorio.
  3. Instala Docker, si aún no se encuentra instalado.

Roles obligatorios

Para obtener los permisos que necesitas para enviar y extraer imágenes, pídele a tu administrador que te otorgue los siguientes roles de IAM en el repositorio:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Autenticación en un repositorio

Debes autenticarte en los repositorios cada vez que uses Docker o cualquier otro cliente de terceros con un repositorio de Docker. En esta sección, se proporciona un resumen rápido de lo que necesitarás para autenticarte correctamente. Para obtener instrucciones detalladas, consulta Configura la autenticación para Docker.

Usa un auxiliar de credenciales

En el caso del auxiliar de credenciales de gcloud CLI o el auxiliar de credenciales independiente, los hosts de Artifact Registry que uses deben estar en tu archivo de configuración de Docker.

Artifact Registry no agrega automáticamente hosts de registro al archivo de configuración de Docker, por lo que deberás agregar los tuyos al archivo.

Ejecuta el auxiliar de credenciales para agregar el host. Por ejemplo, el siguiente comando agrega u-france-east1-docker.s3nsregistry.fr.

  • Auxiliar de credenciales de gcloud CLI:

    gcloud auth configure-docker u-france-east1-docker.s3nsregistry.fr
    
  • Auxiliar de credenciales independiente

    docker-credential-gcr configure-docker u-france-east1-docker.s3nsregistry.fr
    

Cómo usar un token de acceso

Para la autenticación con token de acceso, genera un token y úsalo como contraseña con el comando docker login. Los tokens son válidos durante 60 minutos, por lo que debes autenticarte poco antes de etiquetar, enviar o extraer imágenes.

En el siguiente ejemplo, se genera un token de acceso con la suplantación de la cuenta de servicio y, luego, se realiza la autenticación en Artifact Registry. Debes tener permisos en el rol de creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) para generar un token de esta manera.

Linux

gcloud auth print-access-token \
  --impersonate-service-account  ACCOUNT | docker login \
  -u oauth2accesstoken \
  --password-stdin https://LOCATION-docker.s3nsregistry.fr

Windows

gcloud auth print-access-token \
--impersonate-service-account  ACCOUNT

ya29.8QEQIfY_...

docker login -u oauth2accesstoken -p "ya29.8QEQIfY_..." \
https://LOCATION-docker.s3nsregistry.fr

Si no tienes permisos para suplantar una cuenta de servicio, puedes activar la cuenta de servicio en tu sesión de gcloud CLI y, luego, obtener un token. Para obtener más información, consulta las instrucciones para configurar la autenticación con tokens de acceso.

Usa una clave de cuenta de servicio

En el caso de una clave de cuenta de servicio, la usas como contraseña con el comando docker login.

Por ejemplo, el siguiente comando usa la clave de cuenta de servicio codificada en base64 en el archivo key.json para autenticarse en u-france-east1-docker.s3nsregistry.fr.

Linux

cat key.json | docker login -u _json_key_base64 --password-stdin \
https://u-france-east1-docker.s3nsregistry.fr

Windows

docker login -u _json_key_base64 --password-stdin https://u-france-east1-docker.s3nsregistry.fr < key.json

Para obtener más información, consulta las instrucciones para configurar la autenticación de claves de cuentas de servicio.

Envíe una imagen

Modos de repositorio: estándar

Para enviar una imagen local a un repositorio estándar de Docker, debes etiquetarla con el nombre del repositorio y, luego, enviarla.

Si tu repositorio de Docker de Artifact Registry tiene habilitada la inmutabilidad de etiquetas, una etiqueta siempre debe hacer referencia al mismo resumen de imágenes en el repositorio. No puedes usar la etiqueta en otra versión de la misma imagen que envíes al repositorio. Para obtener más información sobre los resúmenes, las etiquetas y la inmutabilidad de las etiquetas de imágenes, consulta Versiones de imágenes de contenedor.

Para las imágenes grandes, se aplican los siguientes límites:

Hora de carga
Si te autenticas en Artifact Registry con un token de acceso, este solo es válido durante 60 minutos. Si crees que el tiempo de carga excederá los 60 minutos, usa otro método de autenticación.
Tamaño de la imagen
El tamaño máximo de los artefactos es de 5 TB.
Artifact Registry no es compatible con las cargas fragmentadas de Docker. Algunas herramientas admiten la carga de imágenes grandes con cargas fragmentadas o una sola carga monolítica. Debes usar cargas monolíticas para enviar imágenes a Artifact Registry.

Etiqueta la imagen local

  1. Asegúrate de estar autenticado en el repositorio.

  2. Determina el nombre de la imagen. El formato de un nombre de imagen completo es el siguiente:

    LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE
    

    Reemplaza los siguientes valores:

    • LOCATION es la ubicación regional del repositorio en la que se almacena la imagen.
    • PROJECT-ID es el ID del proyecto de tu consola de Trusted Cloud .
    • REPOSITORY es el nombre del repositorio en el que se almacena la imagen.
    • IMAGE es el nombre de la imagen. Puede ser diferente del nombre local de la imagen.

    Por ejemplo, considera una imagen con las siguientes características:

    • Ubicación del repositorio: u-france-east1
    • Nombre del repositorio: my-repo
    • ID del proyecto: my-project
    • Nombre de la imagen local: my-image
    • Nombre de la imagen de destino: test-image

    El nombre de la imagen para este ejemplo es el siguiente:

    u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/test-image
    

    Para obtener detalles sobre el formato del nombre de la imagen, consulta Nombres de imágenes y repositorios.

  3. Etiqueta la imagen local con el nombre del repositorio.

    docker tag SOURCE-IMAGE LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

    Reemplaza SOURCE-IMAGE por el nombre de la imagen local o el ID de la imagen, y TAG por la etiqueta. Si no especificas una etiqueta, Docker aplica la etiqueta predeterminada latest.

    Si el parámetro de configuración de etiquetas de imagen inmutables está habilitado, las etiquetas deben ser únicas para cada versión de la imagen, incluida la etiqueta latest. No puedes enviar una imagen al repositorio si la etiqueta ya la usa otra versión de la misma imagen en el repositorio. Para verificar si el parámetro de configuración está habilitado para el repositorio, ejecuta el siguiente comando:

    gcloud artifacts repositories describe REPOSITORY \
        --project=PROJECT-ID \
        --location=LOCATION
    

    Para la imagen de ejemplo del paso anterior, usarías el siguiente comando si la imagen local my-image se encontrara en el directorio actual:

    docker tag my-image u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/test-image
    

    Si deseas aplicar una etiqueta específica, usa el siguiente comando:

    docker tag SOURCE-IMAGE LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

    Para usar la etiqueta staging con la imagen de ejemplo, debes agregar :staging al comando:

    docker tag my-image u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/test-image:staging
    

Envía la imagen con etiqueta a Artifact Registry

  1. Asegúrate de estar autenticado en el repositorio.

    Si usaste gcloud auth configure-docker o docker-credential-gcr configure-docker para configurar tu cliente de Docker, verifica que el nombre de host de destino esté en tu archivo de configuración de Docker.

  2. Envía la imagen con etiquetas mediante el siguiente comando:

    docker push LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE
    

    Este comando envía la imagen con la etiqueta latest. Si deseas enviar una imagen con una etiqueta diferente, usa el siguiente comando:

    docker push LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

Cuando envías una imagen, se almacena en el repositorio especificado.

Después de enviar tu imagen, puedes hacer lo siguiente:

  • Ve a la consola deTrusted Cloud para ver la imagen.

  • Ejecuta el comando gcloud para ver el resumen generado automáticamente y las etiquetas de la imagen:

    gcloud artifacts docker images list \
    LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE [--include-tags]
    

    En el siguiente ejemplo de resultado, se muestran resúmenes de imágenes truncados, pero el comando siempre devuelve el resumen completo de la imagen.

     IMAGE                                                 DIGEST         CREATE_TIME          UPDATE_TIME
      u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/my-image  sha256:85f...  2019-04-10T15:08:45  2019-04-10T15:08:45
      u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/my-image  sha256:238...  2019-04-10T17:23:53  2019-04-10T17:23:53
      u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/my-image  sha256:85f...  2019-04-10T15:08:46  2019-04-10T15:08:46
    

Cómo extraer imágenes con Docker

Modos de repositorio: estándar
  1. Asegúrate de estar autenticado en el repositorio.

    Si usaste gcloud auth configure-docker o docker-credential-gcr configure-docker para configurar tu cliente de Docker, verifica que el nombre de host de destino esté en tu archivo de configuración de Docker.

  2. Para extraer imágenes de un repositorio, usa el siguiente comando:

    docker pull LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

    o

    docker pull LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE@IMAGE-DIGEST
    

    Reemplaza los siguientes valores:

    • LOCATION es la ubicación regional del repositorio en la que se almacena la imagen.
    • PROJECT es el ID del proyecto de tu consola de Trusted Cloud .
    • PROJECT es el ID del proyecto de tu consola de Trusted Cloud .
    • REPOSITORY es el nombre del repositorio en el que se almacena la imagen.
    • IMAGE es el nombre de la imagen en el repositorio.
    • TAG es la etiqueta de la versión de la imagen que deseas extraer.
    • IMAGE-DIGEST es el valor de hash sha256 del contenido de la imagen. Cada versión de una imagen tiene un resumen único. En la Trusted Cloud consola, haz clic en la imagen específica para ver sus metadatos. El resumen se muestra como el resumen de la imagen.

    Por ejemplo, considera una imagen con las siguientes características:

    • Ubicación del repositorio: u-france-east1
    • Nombre del repositorio: my-repo
    • ID del proyecto: my-project
    • Nombre de la imagen: test-image
    • Etiqueta: staging

    El comando para extraer la imagen es el siguiente:

    docker pull u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/test-image:staging
    

Docker descarga la imagen especificada.

Cómo extraer imágenes con crictl

crictl es una herramienta de línea de comandos útil para que los desarrolladores de tiempos de ejecución de CRI depuren su tiempo de ejecución sin necesidad de configurar componentes de Kubernetes. Si tus nodos de Google Kubernetes Engine usan un entorno de ejecución de containerd, puedes extraer imágenes de Artifact Registry con crictl.

Dado que crictl es principalmente una herramienta de solución de problemas, algunos comandos de Docker, como el envío o el etiquetado de imágenes, no están disponibles.

Para extraer una imagen de Artifact Registry, haz lo siguiente:

  1. En la Trusted Cloud consola, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Establece una conexión SSH al nodo en el que estás solucionando problemas.

  3. Obtén un token de acceso para la autenticación con el repositorio.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
  4. Extrae la imagen con crictl pull --creds y el valor de access_token.

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG

    o

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE@IMAGE-DIGEST

    El resultado luce de la siguiente manera:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

¿Qué sigue?