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

Table of contents

¿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
https://cloud.google.com/artifact-registry/docs/overview
Container Registry: Publicando aplicaciones basadas en contenedores en repositorios privados
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.