Publicar imágenes de Docker

Puedes publicar imágenes de Docker en un registro, tale como Docker Hub o Registro del paquete de GitHub, como parte de tu flujo de trabajo de integración continua (IC).

Introducción

Esta guía te muestra cómo crear un flujo de trabajo que realiza una compilación de Docker y posteriormente publica las imágenes de Docker en Docker Hub o Registro del paquete de GitHub. Con un solo flujo de trabajo, puedes publicar imágenes a un solo registro o a varios de ellos.

Nota: Si quieres subir otro registro de terceros de Docker, el ejemplo en la sección "Publicar imágenes en Registro del paquete de GitHub" puede servir como plantilla.

Prerrequisitos

Te recomendamos que tengas una comprensión básica de las opciones de configuración de flujo de trabajo y cómo crear un archivo de flujo de trabajo. Para obtener más información, consulta la sección "Aprende sobre GitHub Actions".

También puede que encuentres útil el tener un entendimiento básico de lo siguiente:

Acerca de la configuración de imágenes

Esta guía asume que tienes una definición completa de una imagen de Docker almacenada en un repositorio de GitHub. Por ejemplo, tu repositorio debe contener un Dockerfile, y cualquier otro archivo que se necesite para realizar una compilación de Docker para crear una imagen.

En esta guía, utilizaremos la acción build-push-action de Docker para compilar la imagen de Docker y cargarla a uno o más registros de Docker. Para obtener más información, consulta la sección build-push-action.

Publicar imágenes en Docker Hub

Cada vez que creas un nuevo lanzamiento en GitHub, puedes activar un flujo de trabajo para publicar tu imagen. El flujo de trabajo en el ejemplo siguiente se ejecuta cuando el se activa el evento release con el tipo de actividad created. Para obtener más información acerca del evento release, consulta "Eventos que activan flujos de trabajo".

En el flujo de trabajo de ejemplo a continuación, utilizamos las acciones login-action y build-push-action para crear la imagen de Docker y, si la compilación es exitosa, subimos la imagen compilada a Docker Hub.

Para hacer una carga en Docker hub, necesitarás tener una cuenta de Docker Hub y haber creado un repositorio ahí mismo. Para obtener más información, consulta la sección "Publicar una imagen de contenedor de Docker en Docker Hub" en la documentación de Docker.

Las opciones de login-action que se requieren para Docker hub son:

  • username y password: Este es tu nombre de usuario y contraseña de Docker Hub. Te recomendamos almacenar tu nombre de usuario y contraseña de Docker Hub como un secreto para que no se expongan en tu archivo de flujo de trabajo. Para más información, consulta "Crear y usar secretos cifrados."

La opción metadata-action que se requiere para Docker hub es:

  • images: El designador de nombre para la imagen de Docker que estás compilando/subiendo a Docker Hub.

Las opciones de build-push-action que se requieren para Docker Hub son:

  • tags: La etiqueta de tu nueva imagen en el formato DOCKER-HUB-NAMESPACE/DOCKER-HUB-REPOSITORY:VERSION. Puedes configurar una etiqueta sencilla como se muestra a continuación o especificar etiquetas múltiples en una lista.
  • push: Si se configura como true, se subirá la imagen al registro si se compila con éxito.
YAML
# This workflow uses actions that are not certified by GitHub.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# documentación.

name: Publish Docker image

on:
  release:
    types: [published]

jobs:
  push_to_registry:
    name: Push Docker image to Docker Hub
    runs-on: ubuntu-latest
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2

      - name: Log in to Docker Hub
        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
        with:
          images: my-docker-hub-namespace/my-docker-hub-repository

      - name: Build and push Docker image
        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

El flujo de trabajo anterior verifica el repositorio de GitHub, utiliza la login-action para iniciar sesión en el registro y luego utiliza la acción build-push-action para: crear una imagen de Docker con base en el Dockerfile de tu repositorio; subir la imagen a Docker Hub y aplicar una etiqueta a la imagen.

Publicar imágenes en Registro del paquete de GitHub

Cada vez que creas un nuevo lanzamiento en GitHub, puedes activar un flujo de trabajo para publicar tu imagen. El flujo de trabajo en el ejemplo siguiente se ejecuta cuando el se activa el evento release con el tipo de actividad created. Para obtener más información acerca del evento release, consulta "Eventos que activan flujos de trabajo".

En el siguiente ejemplo de flujo de trabajo, utilizamos las acciones login-action , metadata-action, y build-push-action de Docker para crear la imagen de Docker y, si la compilación tiene éxito, sube la imagen cargada al Registro del paquete de GitHub.

Las opciones de login-action que se requieren para el Registro del paquete de GitHub son:

  • registry: Debe configurarse en ghcr.io.
  • username: Puedes utilizar el contexto ${{ github.actor }} para utilizar automáticamente el nombre de usuario del usuario que desencadenó la ejecución del flujo de trabajo. Para obtener más información, consulta "Contextos".
  • password: Puedes utilizar el secreto generado automáticamente GITHUB_TOKEN para la contraseña. Para más información, consulta "Autenticando con el GITHUB_TOKEN."

La opción de metadata-action que se requiere para el Registro del paquete de GitHub es:

  • images: El designador de nombre de la imagen de Docker que estás compilando.

Las opciones de build-push-action que se requieren para Registro del paquete de GitHub son:

  • context: Define el contexto de la compilación como el conjunto de archivos que se ubican en la ruta especificada.
  • push: Si se configura en true, la imagen se cargará al registro si se compila con éxito.
  • tags y labels: Estos se llenan con la salida de la metadata-action.
YAML
# This workflow uses actions that are not certified by GitHub.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# documentación.

name: Create and publish a Docker image

on:
  push:
    branches: ['release']

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}

jobs:
  build-and-push-image:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Log in to the Container registry
        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
        with:
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

      - name: Build and push Docker image
        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

El flujo de trabajo anterior se activa mediante una subida a la rama de "lanzamiento". Verifica el repositorio de GitHub y utiliza la login-action para ingresar en el Registro de contenedores. Luego extrae las etiquetas y marcas de la imagen de Docker. Finalmente, utiliza la acción build-push-action para crear la imagen y publicarla en el Registro de contenedores.

Publicar imágenes en Docker Hub y en Registro del paquete de GitHub

En un flujo de trabajo sencillo, puedes publicar tu imagen de Docker en registros múltiples si utilizas las acciones login-action y build-push-action para cada registro.

El siguiente flujo de trabajo de ejemplo utiliza los pasos de las secciones anteriores ("Publicar imágenes en Docker Hub" y "Publicar imágenes en el Registro del paquete de GitHub") para crear un solo flujo de trabajo que cargue ambos registros.

YAML
# This workflow uses actions that are not certified by GitHub.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# documentación.

name: Publish Docker image

on:
  release:
    types: [published]

jobs:
  push_to_registries:
    name: Push Docker image to multiple registries
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2

      - name: Log in to Docker Hub
        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Log in to the Container registry
        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
        with:
          images: |
            my-docker-hub-namespace/my-docker-hub-repository
            ghcr.io/${{ github.repository }}

      - name: Build and push Docker images
        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

El flujo de trabajo anterior verifica el repositorio GitHub, utiliza login-action dos veces para iniciar sesión en ambos registros y genera etiquetas y marcadores con la acción metadata-action. Entonces, la acción build-push-action crea y sube la imagen de Docker a Docker Hub y al Registro de contenedores.

¿Te ayudó este documento?

Política de privacidad

¡Ayúdanos a hacer geniales estos documentos!

Todos los documentos de GitHub son de código abierto. ¿Notas algo que esté mal o que no sea claro? Emite una solicitud de cambios.

Haz una contribución

O, aprende cómo contribuir.