Guía para Publicar Imágenes de Docker en Google Artifact Registry

Leiner BarriosLeiner Barrios
4 min read

¿Qué es Container Registry?

Container Registry permite almacenar y gestionar imágenes de contenedores, también permite almacenar paquetes de Maven y npm en un solo lugar. Al estar en la nube de Google, permite integrar herramientas y entornos de ejecución adicionales de GCP, lo cual facilita la implementación de CI/CD para construir y mantener pipelines automatizados.

Características que ofrece Artifact Registry

  • Seguridad

  • Protección contra implementaciones de imágenes riesgosas

  • Estadísticas del análisis de vulnerabilidades

  • Automatización de compilación e implementación

Requisitos

Antes de comenzar a construir imágenes y subirlas a Google Container Registry debes contar con una cuenta de Google, un proyecto ya creado en https://console.cloud.google.com/ y tener el cliente de Google (https://cloud.google.com/sdk/docs/install) instalado en un máquina. Adicionalmente a eso, sería favorable que cuentes con los siguientes conocimientos previos:

  • Conceptos básicos sobre contenedores y sistemas distribuidos

  • Docker (tener instalado Docker en tu máquina)

  • Comandos básicos de Linux

Habilitar API de Artifact Registry

Cuando te encuentres en la consola de Google Cloud, debes dirigirte a la sección de APIs y servicios y luego en biblioteca, cuando te encuentres allí, busca la API de Artifact Registry y habilitala.

Crear repositorio de imágenes

Luego de habilitar la API de Artifact Registry, navega a ese servicio y crea un nuevo repositorio de imágenes.

Configurar formato y región del repositorio de imágenes

Selecciona Docker como formato, elige la región de tu preferencia y lo demás dejalo como viene por defecto. Al terminar la creación del repositorio tendrás algo como esto:

Verificar proyecto actual

Con los siguientes comandos verificamos y establecemos el proyecto actual, debes estar situado en el proyecto en el que necesites almacenar tus imágenes de Docker.

gcloud config get-value project
gcloud config set project <ID-PROYECTO>

Autenticación para subir imágenes

Hemos hecho varios pasos, ¿Un poco molesto al principio no? Crear cuenta, crear proyecto, habilitar APIs, instalar gcloud, verificar proyecto actual…

Todos estos pasos se realizan una sola vez, luego de ello podrás subir las imágenes que quieras con diferentes tags en un solo paso. Solo ten un poco de paciencia 😉.

Para autenticarnos, ejecutamos el siguiente comando, en mi caso sería

gcloud auth configure-docker <REGION>-docker.pkg.dev

REGION: Ubicación o región de tu preferencia para realizar el proyecto, en mi caso usaré us-east1.

Si resulta exitosa la autenticación, recibirás un mensaje como este:

Adding credentials for: us-east1-docker.pkg.dev gcloud credential helpers already registered correctly.

Construir imagen

Para construir la imagen debes dirigirte al repositorio que acabas de crear y copiar todo el path, de esta manera:

Obtendrás una estructura como <REGION>-docker.pkg.dev/<ID-PROYECTO>/<NOMBRE-REPOSITORIO> la cual necesitarás para crear y subir la imagen al repositorio, en mi caso será la siguiente: us-east1-docker.pkg.dev/avian-tract-425323-m3/mi-primer-repositorio

Para construir mi imagen usaré una API de NestJS en la que estoy trabajando, tu podrás construir la imagen del proyecto que necesites subir, para cada lenguaje podrás encontrar distintos Dockerfiles de ejemplo. El Dockerfile de mi API es el siguiente:

FROM node:20

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run build

EXPOSE 3000

CMD [ "node", "dist/main" ]

Para construir la imagen ejecutamos el siguiente comando:

docker build -t <REGION>-docker.pkg.dev/<ID-PROYECTO>/<REPOSITORIO>/<IMAGEN>:<TAG-IMAGEN> .

En mi caso sería:

docker build -t us-east1-docker.pkg.dev/avian-tract-425323-m3/mi-primer-repositorio/my-nestjs-api:1.0 .

Publicar imagen

Luego de realizar la construcción con éxito, vamos a desplegar la imagen con docker push, acompañado del path que copiamos previamente, también denominado URI.

docker push us-east1-docker.pkg.dev/avian-tract-425323-m3/mi-primer-repositorio/my-nestjs-api:1.0

Si la imagen es publicada con éxito, se te mostrará un mensaje como este en tu terminal:

En el repositorio que creaste podrás visualizar la imagen recién subida:

Esta imagen la podrás usar posteriormente para desplegar tu aplicación en servicios como Cloud Run o incluso si quieres ir más allá, conectar tu repositorio de Artifact Registry con el servicio de Kubernetes Engine para desplegar tu contenedor en un clúster de K8s.

¡Felicidades! Has aprendido a subir imágenes de Docker en la nube, en este caso en un registro de artefactos de Google Cloud. Si te sirvió este blog, déjame tu opinión en un comentario, oportunidad de mejor o algún inconveniente que hayas tenido al seguir el tutorial.

Referencias

0
Subscribe to my newsletter

Read articles from Leiner Barrios directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Leiner Barrios
Leiner Barrios

Ingeniero mecatrónico y estudiante MISO (Maestría en Ingeniería de Software) de la Universidad de los Andes. Actualmente trabajo como arquitecto desarrollador de software. Me apasiona el fútbol, la programación y el café por las mañanas antes de iniciar la chamba.