Skip to main content
Publicamos actualizaciones para la documentación con frecuencia y es posible que aún se esté traduciendo esta página. Para obtener la información más reciente, consulta la documentación en inglés.
GitHub AE es una versión limitada en este momento.

Publicación de imágenes de Docker

Puedes publicar imágenes de Docker en un registro, tale como Docker Hub o GitHub Packages, 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 GitHub Packages. Con un solo flujo de trabajo, puedes publicar imágenes a un solo registro o a varios de ellos.

Nota: Si quiere insertar en otro registro de Docker de terceros, el ejemplo de la sección "Publicar imágenes en GitHub Packages" puede servir como plantilla.

Requisitos previos

Recomendamos que tengas un conocimiento básico de las opciones de configuración de flujo de trabajo y de cómo crear un archivo de flujo de trabajo. Para más información, vea "Más información 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, su repositorio debe contener un Dockerfile y cualquier otro archivo que se necesite para realizar una compilación de Docker a fin de crear una imagen.

En esta guía, utilizaremos la acción build-push-action de Docker para compilar la imagen de Docker e insertarla en uno o varios registros de Docker. Para más información, vea build-push-action.

Publicar imágenes en Docker Hub

Cada vez que creas una nueva versión en GitHub AE, puedes desencadenar un flujo de trabajo para publicar tu imagen. El flujo de trabajo del ejemplo siguiente se ejecuta cuando se desencadena el evento release con el tipo de actividad created. Para más información sobre el evento release, vea "Eventos que desencadenan flujos de trabajo".

En el siguiente ejemplo de flujo de trabajo, utilizamos las acciones login-action y build-push-action de Docker para compilar la imagen de Docker y, si la compilación se realiza correctamente, insertar la imagen compilada en 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, vea "Insertar una imagen de contenedor Docker en Docker Hub" en la documentación de Docker.

Las opciones login-action necesarias para Docker Hub son las siguientes:

  • username y password: son el nombre de usuario y la 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, vea "Creación y uso de secretos cifrados".

La opción metadata-action necesaria para Docker Hub es la siguiente:

  • images: el espacio de nombres y el nombre para la imagen de Docker que está compilando o insertando en Docker Hub.

Las opciones build-push-action necesarias para Docker Hub son las siguientes:

  • tags: la etiqueta de la nueva imagen con 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 establece en true, la imagen se insertará en el registro si se ha compilado correctamente.
YAML
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.

# GitHub recomienda anclar acciones a un SHA de confirmación.
# Para obtener una versión más reciente, debes actualizar el SHA.
# También puedes hacer referencia a una etiqueta o rama, pero la acción puede cambiar sin ninguna advertencia.

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 comprueba el repositorio de GitHub, utiliza login-action para iniciar sesión en el registro y luego utiliza la acción build-push-action para lo siguiente: compilar una imagen de Docker basada en el elemento Dockerfile del repositorio; insertar la imagen en Docker Hub y aplicar una etiqueta a la imagen.

Publicar imágenes en GitHub Packages

Cada vez que creas una nueva versión en GitHub AE, puedes desencadenar un flujo de trabajo para publicar tu imagen. El flujo de trabajo del ejemplo siguiente se ejecuta cuando se desencadena el evento release con el tipo de actividad created. Para más información sobre el evento release, vea "Eventos que desencadenan flujos de trabajo".

En el flujo de trabajo de ejemplo siguiente, utilizamos las acciones login-action y build-push-action de Docker para compilar la imagen de Docker y, si la compilación se realiza correctamente, insertar la imagen compilada en GitHub Packages.

Las opciones login-action necesarias para GitHub Packages son las siguientes:

  • registry: debe establecerse en docker.pkg.github.com.
  • username: puede utilizar el contexto ${{ github.actor }} para utilizar automáticamente el nombre de usuario del usuario que ha desencadenado la ejecución del flujo de trabajo. Para más información, vea "Contextos".
  • password: puede usar el secreto GITHUB_TOKEN generado automáticamente para la contraseña. Para más información, vea "Autenticación con GITHUB_TOKEN".

Las opciones build-push-action necesarias para GitHub Packages son las siguientes:

  • push: si se establece en true, la imagen se insertará en el registro si se ha compilado correctamente.

  • tags: debe establecerse con el formato docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION.

    Por ejemplo, para una imagen denominada octo-image almacenada en GitHub en http://github.com/octo-org/octo-repo, la opción tags debe establecerse en docker.pkg.github.com/octo-org/octo-repo/octo-image:latest. Puedes configurar una tarjeta sencilla como se muestra a continuación o especificar etiquetas múltiples en una lista.

YAML
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.

# GitHub recomienda anclar acciones a un SHA de confirmación.
# Para obtener una versión más reciente, debes actualizar el SHA.
# También puedes hacer referencia a una etiqueta o rama, pero la acción puede cambiar sin ninguna advertencia.

name: Publish Docker image

on:
  release:
    types: [published]
jobs:
  push_to_registry:
    name: Push Docker image to GitHub Packages
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2
      
      - name: Log in to GitHub Docker Registry
        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
        with:
          registry: docker.YOUR-HOSTNAME.com
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      
      - name: Build and push Docker image
        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
        with:
          context: .
          push: true
          tags: |
            docker.YOUR-HOSTNAME.com/${{ github.repository }}/octo-image:${{ github.sha }}
            docker.YOUR-HOSTNAME.com/${{ github.repository }}/octo-image:${{ github.event.release.tag_name }}

El flujo de trabajo anterior comprueba el repositorio GitHub AE, utiliza login-action para iniciar sesión en el registro y, luego, utiliza la acción build-push-action para lo siguiente: compilar una imagen de Docker basada en el elemento Dockerfile del repositorio; insertar la imagen en el registro de Docker, y aplicar el SHA de confirmación y la versión de lanzamiento como etiquetas de la imagen.

Publicar imágenes en Docker Hub y en GitHub Packages

En un solo flujo de trabajo, puede publicar su imagen de Docker en varios registros mediante las acciones login-action y build-push-action para cada uno de ellos.

En el flujo de trabajo de ejemplo siguiente se usan los pasos de las secciones anteriores ("Publicar imágenes en Docker Hub" y "Publicar imágenes en GitHub Packages") para crear un único flujo de trabajo que inserte en ambos registros.

YAML
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.

# GitHub recomienda anclar acciones a un SHA de confirmación.
# Para obtener una versión más reciente, debes actualizar el SHA.
# También puedes hacer referencia a una etiqueta o rama, pero la acción puede cambiar sin ninguna advertencia.

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 Docker registry
        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
        with:
          registry: docker.YOUR-HOSTNAME.com
          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
            docker.YOUR-HOSTNAME.com/${{ github.repository }}/my-image
      
      - 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 comprueba el repositorio GitHub AE, utiliza login-action dos veces para iniciar sesión en ambos registros y genera etiquetas con la acción metadata-action. Después, la acción build-push-action compila la imagen de Docker y la inserta en Docker Hub y en el registro de Docker.