Skip to main content
Frecuentemente publicamos actualizaciones de nuestra documentación. Es posible que la traducción de esta página esté en curso. Para conocer la información más actual, visita la documentación en inglés. Si existe un problema con las traducciones en esta página, por favor infórmanos.

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).

Nota: Los ejecutores hospedados en GitHub no son compatibles con GitHub Enterprise Server actualmente. Puedes encontrar más información sobre el soporte que se tiene planeado en el futuro en el Itinerario público de GitHub.

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.

Note: GitHub Actions on tu instancia de GitHub Enterprise Server may have limited access to actions on GitHub.com or GitHub Marketplace. For more information, see "Managing access to actions from GitHub.com" and contact your GitHub Enterprise site administrator.

Publicar imágenes en Docker Hub

Cada vez que creas un nuevo lanzamiento en GitHub Enterprise Server, 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: [self-hosted]
    steps:
      - name: Check out the repo
        uses: actions/checkout@v3

      - 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

Nota:: Registro de contenedores se encuentra actualmente en beta para GitHub Enterprise Server y está sujeto a cambios.

Both Registro del paquete de GitHub and subdomain isolation must be enabled to use Registro de contenedores. Para obtener más información, consulta la sección "Trabajar con el registro de contenedores."

Cada vez que creas un nuevo lanzamiento en GitHub Enterprise Server, 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 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 containers.HOSTNAME.
  • 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."

Las opciones de build-push-action requeridas para el Registro del paquete de GitHub son:

  • push: Si se configura en true, la imagen se cargará al registro si se compila con éxito.

  • tags: Debe configurarse en el formato containers.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION.

    Por ejemplo, para una imagen que se llama octo-image y se almacena en GitHub Enterprise Server en https://HOSTNAME/octo-org/octo-repo, la opción de tags debe configurarse como containers.HOSTNAME/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
# 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: containers.HOSTNAME
  IMAGE_NAME: ${{ github.repository }}

jobs:
  build-and-push-image:
    runs-on: [self-hosted]
    permissions:
      contents: read
      packages: write

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

      - 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 "release". 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

Nota:: Registro de contenedores se encuentra actualmente en beta para GitHub Enterprise Server y está sujeto a cambios.

Both Registro del paquete de GitHub and subdomain isolation must be enabled to use Registro de contenedores. Para obtener más información, consulta la sección "Trabajar con el registro de contenedores."

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: [self-hosted]
    permissions:
      packages: write
      contents: read
    steps:
      - name: Check out the repo
        uses: actions/checkout@v3

      - 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: containers.HOSTNAME
          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
            containers.HOSTNAME/${{ 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 de GitHub Enterprise Server, 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.