Cómo publicar imágenes Docker de Node.js en el registro Docker Hub con GitHub Actions
9 de agosto de 2021
0 minutos de lecturaEn una publicación anterior, presentamos un tutorial paso a paso sobre cómo publicar imágenes Docker de Node.js en el registro GitHub Packages con GitHub Actions. En esta publicación, nos enfocaremos en publicar en el registro público Docker Hub la imagen Docker que compilamos.
Quizás te preguntes por qué es útil. La aplicación de línea de comandos de Docker, docker, tiene una configuración predeterminada del registro para docker.io, que apunta al registro Docker Hub. Esto facilita la experiencia de desarrollo, ya que permite extraer imágenes con la convención <user>/<repository>, como en el siguiente ejemplo, si quisieras usar Snyk CLI como imagen Docker:
En este artículo, veremos paso a paso cómo configurar otro flujo de trabajo para compilar y publicar una imagen Docker, que puede funcionar en paralelo con el flujo de trabajo anterior que presentamos para el registro GitHub Packages.
Al igual que la publicación anterior, esta continúa con Dockly, la herramienta de línea de comandos de Node.js de código abierto para administrar contenedores Docker desde la CLI, y muestra cómo subir una imagen Docker a Docker Hub. Puedes ver el flujo de trabajo final en el repositorio de GitHub de Dockly.
Crea un flujo de trabajo de GitHub Actions
Para agregar un nuevo flujo de trabajo, puedes crear un archivo en el directorio .github/workflows/ o ir a tu repositorio de código abierto en GitHub, hacer clic en la pestaña Actions y luego en New Workflow para iniciar un nuevo flujo de trabajo:

Elige el nombre del archivo del flujo de trabajo para publicar en Docker Hub, por ejemplo, docker-publish-to-dockerhub.yml.
Si lo haces desde la interfaz de GitHub, es posible que el archivo del flujo de trabajo ya tenga contenido. En ese caso, simplemente bórralo y agrega lo siguiente:
Describimos cada uno de estos aspectos en detalle en el artículo anterior, pero, a modo de resumen:
Este flujo de trabajo de Docker Hub se ejecutará cada vez que se haga un push, se publique una versión con etiquetas o se cree un pull request en la rama principal del repositorio.
Las variables de entorno globales definen
REGISTRYcomodocker.io, lo que significa que nuestras imágenes se subirán a Docker Hub y estarán disponibles allí. También establecenIMAGE_NAMEcon el nombre de usuario de GitHub y el nombre del repositorio. Si tu nombre de usuario de Docker Hub es diferente, es posible que debas ajustar este valor.
A continuación, definiremos nuestros trabajos, en los que estableceremos el proceso para compilar la imagen Docker y luego publicarla.
Inicia sesión en Docker Hub y compila y publica la imagen Docker
A continuación, tendremos que realizar estas acciones:
Iniciar sesión en Docker Hub. Para ello, tendremos que crear un token en Docker Hub y configurarlo como secreto del repositorio en la configuración del repositorio de GitHub.
Extraer los metadatos de la imagen Docker que compilamos para que estén disponibles durante el proceso de compilación.
Subir a Docker Hub la imagen Docker compilada.
Esto se configura con el siguiente fragmento de código, que debes agregar al contenido del flujo de trabajo creado en el paso anterior:
Una vez que hayas aplicado el archivo del flujo de trabajo y lo hayas integrado en la rama principal, deberías obtener una compilación exitosa que genere una nueva imagen Docker publicada en Docker Hub:

Una limitación conocida es que, por ahora, el repositorio de Docker Hub en el que publicas la imagen no completa automáticamente una descripción adecuada ni el contenido del README, porque esta funcionalidad no está disponible en la GitHub Action oficial docker/build-and-push.
Si quieres contar con esta funcionalidad, los responsables del mantenimiento recomiendan la GitHub Action del marketplace Docker Hub Description y enlazan en su documentación a un ejemplo que puedes adoptar.
Extrae imágenes Docker del registro Docker Hub
Para obtener la nueva imagen Docker de Docker Hub, solo tienes que ejecutar el conocido comando docker pull , por ejemplo:
¿Estás subiendo imágenes Docker vulnerables?
¿Por qué detenerte aquí? Con Snyk puedes encontrar, monitorear e incluso corregir vulnerabilidades en imágenes Docker. Puedes adoptar el flujo de trabajo que mejor se adapte a tus necesidades: usar la CLI o importar imágenes Docker directamente desde Docker Hub para monitorearlas y detectar vulnerabilidades de seguridad.
Mi colega Eric Smalling escribió una guía detallada de mejores prácticas sobre Flujos de trabajo impulsados por desarrolladores: análisis de Dockerfile e imágenes, priorización y corrección, por si quieres profundizar tus conocimientos sobre este tema. Por último, puedes usar una Snyk GitHub Action en el ecosistema de GitHub Actions para analizar vulnerabilidades de seguridad en bibliotecas de código abierto e imágenes de contenedores.
Profundiza
Si quieres explorar más a fondo las mejores prácticas para compilar imágenes Docker, te recomiendo lo siguiente:
10 mejores prácticas para contenerizar aplicaciones web de Node.js con Docker
Docker para desarrolladores de Node.js: 5 cosas que debes saber para proteger tu seguridad
Y si no leíste el artículo anterior y quieres publicar imágenes Docker en GitHub Packages, consulta cómo publicar imágenes Docker de Node.js en el registro GitHub Packages con GitHub Actions.
Seguridad de contenedores centrada en los desarrolladores
Snyk encuentra y corrige automáticamente vulnerabilidades en imágenes de contenedores y cargas de trabajo de Kubernetes.