Skip to main content
Publicamos atualizações frequentes em nossa documentação, e a tradução desta página ainda pode estar em andamento. Para obter as informações mais atualizadas, acesse a documentação em inglês.

Publicando imagens do Docker

Você pode publicar imagens Docker para um registro, como o Docker Hub ou GitHub Packages, como parte do seu fluxo de trabalho de integração contínua (CI).

Observação: no momento, não há suporte para os executores hospedados no GitHub no GitHub Enterprise Server. Você pode ver mais informações sobre o suporte futuro planejado no GitHub public roadmap.

Introdução

Este guia mostra como criar um fluxo de trabalho que realiza uma criação do Docker e, em seguida, publica imagens do Docker no Docker Hub ou no GitHub Packages. Com um único fluxo de trabalho, você pode publicar imagens em um único registro ou em vários registros.

Observação: caso você deseje efetuar push para outro registro do Docker de terceiros, o exemplo descrito na seção "Como publicar imagens no GitHub Packages" pode servir como um bom modelo.

Pré-requisitos

Recomendamos que você tenha um entendimento básico das opções de configuração do fluxo de trabalho e de como criar um arquivo do fluxo de trabalho. Para obter mais informações, confira "Aprenda a usar o GitHub Actions".

Você também pode achar útil ter um entendimento básico do seguinte:

Sobre a configuração da imagem

Este guia pressupõe que você tem uma definição completa para uma imagem Docker armazenada em um repositório GitHub. Por exemplo, seu repositório precisa conter um Dockerfile e todos os outros arquivos necessários para executar um build do Docker para criar uma imagem.

Você pode usar chaves de anotação pré-definidas para adicionar metadados, incluindo uma descrição, uma licença e um repositório de origem à imagem de contêiner. Para obter mais informações, confira "Como trabalhar com o Container registry".

Neste guia, usaremos a ação build-push-action do Docker para compilar a imagem do Docker e efetuar push dela para um ou mais registros do Docker. Para obter mais informações, confira build-push-action.

Observação: o GitHub Actions no your GitHub Enterprise Server instance pode ter acesso limitado às ações do GitHub.com ou do GitHub Marketplace. Para obter mais informações, confira "Como gerenciar o acesso às ações do GitHub.com" e entre em contato com o administração do site do GitHub Enterprise.

Publicar imagens no Docker Hub

Cada vez que criar uma nova versão no GitHub Enterprise Server, você poderá acionar um fluxo de trabalho para publicar a imagem. O fluxo de trabalho no exemplo abaixo é executado quando o evento release é disparado com o tipo de atividade created. Para obter mais informações sobre o evento release, confira "Eventos que disparam fluxos de trabalho".

No exemplo de fluxo de trabalho abaixo, usaremos as ações login-action e build-push-action do Docker para compilar a imagem do Docker e, se o build for bem-sucedido, efetuaremos push da imagem compilada para o Docker Hub.

Para fazer push para o Docker Hub, você deverá ter uma conta Docker Hub e ter criado um repositório Docker Hub. Para obter mais informações, confira "Como efetuar push de uma imagem de contêiner do Docker para o Docker Hub" na documentação do Docker.

As opções login-action necessárias para o Docker Hub são:

  • username e password: esse é seu nome de usuário e sua senha do Docker Hub. Recomendamos armazenar seu nome de usuário e senha do Docker Hub como segredos para que não estejam expostos no seu arquivo de fluxo de trabalho. Para obter mais informações, confira "Como criar e usar segredos criptografados".

A opção metadata-action obrigatória para o Docker Hub é:

  • images: o namespace e o nome da imagem do Docker que você está compilando/enviando por push para o Docker Hub.

As opções build-push-action necessárias para o Docker Hub são:

  • tags: a marca da nova imagem no formato DOCKER-HUB-NAMESPACE/DOCKER-HUB-REPOSITORY:VERSION. Você pode definir uma única tag, conforme mostrado abaixo, ou especificar várias tags em uma lista.
  • push: se isso for definido como true, a imagem será enviada por push para o registro se for compilada com sucesso.
YAML
# Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# online.

# O GitHub recomenda fixar ações em um SHA de commit.
# Para obter uma versão mais recente, você precisará atualizar o SHA.
# Você também pode fazer referência a uma marca ou branch, mas a ação pode ser alterada sem aviso.

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 }}

O fluxo de trabalho acima faz check-out do repositório do GitHub, usa login-action para fazer logon no registro e usa a ação build-push-action para: compilar uma imagem do Docker com base no Dockerfile do seu repositório, efetuar push da imagem para o Docker Hub e aplicar uma marca à imagem.

Publicar imagens em GitHub Packages

Observação: atualmente, o Container registry está na versão beta do GitHub Enterprise Server e sujeito a alterações.

O GitHub Packages e o isolamento de subdomínio devem ser habilitados para usar o Container registry. Para obter mais informações, confira "Como trabalhar com o Registro de contêiner".

Cada vez que criar uma nova versão no GitHub Enterprise Server, você poderá acionar um fluxo de trabalho para publicar a imagem. O fluxo de trabalho no exemplo abaixo é executado quando o evento release é disparado com o tipo de atividade created. Para obter mais informações sobre o evento release, confira "Eventos que disparam fluxos de trabalho".

No exemplo de fluxo de trabalho abaixo, usaremos as ações login-action e build-push-action do Docker para compilar a imagem do Docker e, se o build for bem-sucedido, efetuar push da imagem compilada para o GitHub Packages.

As opções login-action obrigatórias para o GitHub Packages são:

  • registry: deve ser definido como containers.HOSTNAME.
  • username: use o contexto ${{ github.actor }} para usar automaticamente o nome de usuário do usuário que disparou a execução de fluxo de trabalho. Para obter mais informações, confira "Contextos".
  • password: use o segredo GITHUB_TOKEN gerado automaticamente para a senha. Para obter mais informações, confira "Como se autenticar com o GITHUB_TOKEN".

As opções build-push-action obrigatórias para o GitHub Packages são:

  • push: se isso for definido como true, a imagem será enviada por push para o registro se for compilada com sucesso.

  • tags: deve ser definido no formato containers.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION.

    Por exemplo, para uma imagem chamada octo-image armazenada no GitHub Enterprise Server em https://HOSTNAME/octo-org/octo-repo, a opção tags deverá ser definida como containers.HOSTNAME/octo-org/octo-repo/octo-image:latest. Você pode definir uma única tag, conforme mostrado abaixo, ou especificar várias tags em uma lista.

    YAML

Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.

São fornecidas por terceiros e regidas por

termos de serviço, política de privacidade e suporte separados

online.

O GitHub recomenda fixar ações em um SHA de commit.

Para obter uma versão mais recente, você precisará atualizar o SHA.

Você também pode fazer referência a uma marca ou branch, mas a ação pode ser alterada sem aviso.

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 }}

O fluxo de trabalho acima é acionado por um push para o branch da "versão". Ele faz check-out do repositório do GitHub e usa `login-action` para fazer logon no Container registry. Em seguida, extrai etiquetas e tags para a imagem do Docker. Por fim, ele usa a ação `build-push-action` para criar a imagem e publicá-la no Container registry.


## Publicar imagens no Docker Hub e GitHub Packages

 

<div class="extended-markdown note border rounded-1 mb-4 p-3 color-border-accent-emphasis color-bg-accent f5">

**Observação**: atualmente, o Container registry está na versão beta do GitHub Enterprise Server e sujeito a alterações. 

O GitHub Packages e o isolamento de subdomínio devem ser habilitados para usar o Container registry. Para obter mais informações, confira "[Como trabalhar com o Registro de contêiner](/packages/working-with-a-github-packages-registry/working-with-the-container-registry)".

</div>

 

Em um fluxo de trabalho individual, você pode publicar sua imagem do Docker em vários registros usando as ações `login-action` e `build-push-action` para cada registro.

O exemplo de fluxo de trabalho a seguir usa as etapas das seções anteriores ("[Como publicar imagens no Docker Hub](#publishing-images-to-docker-hub)" e "[Como publicar imagens no GitHub Packages](#publishing-images-to-github-packages)") para criar um fluxo de trabalho individual que efetua push para os dois registros.

```yaml{:copy}
# Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# online.

# O GitHub recomenda fixar ações em um SHA de commit.
# Para obter uma versão mais recente, você precisará atualizar o SHA.
# Você também pode fazer referência a uma marca ou branch, mas a ação pode ser alterada sem aviso.

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 }}

O fluxo de trabalho acima faz check-out do repositório do GitHub Enterprise Server, usa a login-action duas vezes para fazer logon nos dois registros e gera marcas e rótulos com a ação metadata-action. Em seguida, a ação build-push-action compila a imagem do Docker e a envia por push para o Docker Hub e o Container registry.