Ayer te conté que GitHub te permite publicar diferentes tipos de paquetes en tus repositorios, entre ellos imágenes de Docker. Sin embargo, a día de hoy con ese formato no te permite desligar una imagen de un repositorio y este está sujeto a la visibilidad y permisos del mismo. Es por ello que a finales del año pasado se lanzó GitHub Container Registry, todavía en preview, que nos permitirá que las imágenes cuelguen directamente de la organización o cuenta de usuario, en lugar de un repositorio concreto, permitiendo además la posibilidad de acceso anónimo a imágenes que marquemos como públicas, simplificando así muchos escenarios. En este artículo te cuento cómo activar esta característica y cómo usarla.
Activar la característica en preview
Para poder usar GCR lo primero que debemos hacer es activar esta característica todavía en preview. Para ello, en el menú debes seleccionar la opción Feature Preview:
y habilitar la única característica que por ahora hay disponible llamada Improved container support.

Si estás trabajando con una organización en GitHub esta tarea se debe llevar a cabo a través de la siguiente ruta: https://github.com/organizations/NOMBRE_DE_LA_ORGANIZACION/settings/packages

Sin embargo, en este caso, cuando se habilita, nos ofrece tanto la opción de permitir imágenes privadas y públicas.

A partir de este momento ya podrás usar GitHub Container Registry.
Iniciar sesión en GitHub Container Registry
Al igual que hicimos para publicar una imagen en GitHub Packages, lo primero que necesitamos es iniciar sesión en este registro. Para ello es necesario crear un Personal Access Token en el apartado https://github.com/settings/tokens, con los mismos permisos.

Guarda el token en un archivo y ejecuta el siguiente comando para iniciar sesión con el cliente de Docker de tu máquina:
cat PAT.txt | docker login ghcr.io -u USERNAME --password-stdin
El resultado debería de ser Login Succeded. A partir de este momento ya estamos listos para publicar nuestras imágenes en GCR.
Nomenclatura para las imágenes
En este caso, la nomenclatura cambia respecto a GitHub Packages, ya que en esta se hacía alusión al repositorio donde se está publicando la imagen. En este caso, donde no se asocia a un repositorio en concreto, el nombre de la imagen debe seguir este formato:
ghcr.io/OWNER/IMAGE_NAME:VERSION
Por lo que siguiendo el mismo ejemplo que con GitHub Packages deberíamos etiquetarla de la siguiente manera:
docker tag hellodevops ghcr.io/0gis0/hello-devops:v1
Publicar la imagen
Por último, publicamos la imagen como hicimos en el caso anterior, o en Docker hub y Azure Container Registry:
docker push ghcr.io/0gis0/hello-devops:v1
Si todo ha ido bien esta se habrá publicado correctamente. Sin embargo, si anteriormente veíamos las imágenes en el apartado Packages del repositorio en cuestión ¿cómo localizo ahora aquellas que no dependen de un repositorio? Si recuerdas, en el artículo anterior te comenté que también era posible ver tus paquetes desde la ruta https://github.com/TU_USUARIO?tab=packages. Ahora que tienes habilitado GitHub Container Registry, y tu primera imagen publicada, verás estas también en el mismo apartado, pero sin un repositorio asociado.

Si quisiéramos que la misma fuera pública podemos seleccionarla en esa lista, hacer clic en el botón Package Settings:
y dentro de este apartado cambiar la visibilidad a través del botón Change visibility:
¡Saludos!

Bootcamp DevOps
Si tienes ganas de meterte en el área de DevOps, formo parte del
equipo de docentes del Bootcamp DevOps Lemoncode, ¿Te animas a
aprender con nosotros?