Publicar tu imagen de Docker en GitHub Container Registry

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:

Feature preview

y habilitar la única característica que por ahora hay disponible llamada Improved container support.

Habilitar la característica 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

GitHub Organization – Settings – Packages

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

GitHub – Organization Settings – Packages – Container Creation

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.

PAT para GitHub Container Registry

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.

Imagen publicada a nivel de cuenta de usuario en GitHub Container Registry

Si quisiéramos que la misma fuera pública podemos seleccionarla en esa lista, hacer clic en el botón Package Settings:

GitHub – 0GiS0 Profile – Packages – hello-devops – Package Settings

y dentro de este apartado cambiar la visibilidad a través del botón Change visibility:

GitHub – Packages – Manage access – Visibility

¡Saludos!

logo lemoncode

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?

Más Info