Publicando imagens do Docker

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

GitHub Actions está disponível com GitHub Free, GitHub Pro, GitHub Free para organizações, GitHub Team, GitHub Enterprise Cloud e GitHub AE. GitHub Actions não está disponível para repositórios privados pertencentes a contas usando os planos de legado por repositório.

Observação: Executores hospedados em GitHub não são atualmente compatíveis com GitHub Enterprise Server. Você pode ver mais informações sobre suporte futuro planejado no Itinerário público do GitHub.

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 Package Registry. Com um único fluxo de trabalho, você pode publicar imagens em um único registro ou em vários registros.

Observação: Se você desejar fazer push para outro registro do Docker de terceiros, o exemplo na seção "Publicar imagens em GitHub Package Registry" poderá 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, consulte "Aprenda 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 deve conter um arquivo Docker e quaisquer outros arquivos necessários para executar uma criação do Docker para criar uma imagem.

Neste guia, usaremos a ação build-push-action do Docker para criar a imagem do Docker e enviá-la para um ou mais registros do Docker. Para obter mais informações, consulte build-push-action.

Observação: GitHub Actions em sua instância do GitHub Enterprise Server pode ter acesso limitado a ações em GitHub.com ou GitHub Marketplace. Para obter mais informações, consulte "Comunicação entre os executores auto-hospedados e GitHub".

Publicar imagens no Docker Hub

Cada vez que criar uma nova versão no GitHub, você poderá acionar um fluxo de trabalho para publicar a sua imagem. O fluxo de trabalho no exemplo abaixo é executado quando o evento release aciona com o tipo de atividade created. Para obter mais informações sobre o evento release, consulte "Events that trigger workflows.

No exemplo de fluxo de trabalho, nós usamos as ações de login do Docker login-action e build-push-action para construir a imagem do Docker e, se a construção for bem-sucedida, faça push da imagem construída 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, consulte "Fazer push de uma imagem de contêiner do Docker para o Docker Hub" na documentação do Docker.

As opçõeslogin-action` obrigatórias para o Docker Hub são:

  • nome de usuário` e `senha`: Este é o seu nome de usuário e 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, consulte "[Criando e usando segredos encriptados](/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)".

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

  • tags: A tag de sua 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 definido como verdadeiro, a imagem será enviada por push para o registro, se este for construído com sucesso.
YAML
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@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - name: Push to Docker Hub
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: my-docker-hub-namespace/my-docker-hub-repository:latest

Publicar imagens em GitHub Package Registry

Cada vez que criar uma nova versão no GitHub, você poderá acionar um fluxo de trabalho para publicar a sua imagem. O fluxo de trabalho no exemplo abaixo é executado quando o evento release aciona com o tipo de atividade created. Para obter mais informações sobre o evento release, consulte "Events that trigger workflows.

No exemplo de fluxo de trabalho, nós usamos as ações login-action do Docker e build-push-action para construir a imagem do Docker e, se a compilação for bem-sucedida, faça push da imagem construída para GitHub Package Registry.

As opções de login-action de login necessárias para GitHub Package Registry são:

  • registro: Deve ser definido como docker.pkg.github.com.
  • nome de usuário: Você pode usar o contexto ${{ github.actor }} para usar automaticamente o nome de usuário que acionou a execução do fluxo de trabalho. Para obter mais informações, consulte "Contexto e sintaxe de expressão para GitHub Actions".
  • senha: Você pode usar o segredo GITHUB_TOKEN gerado automaticamente para a senha. Para obter mais informações, consulte "Permissões para o GITHUB_TOKEN".

As opções de build-push-action necessárias para GitHub Package Registry são:

  • tags: Deve ser definido no formato docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION. Por exemplo, para uma imagem denominada octo-image armazenada em GitHub em http://github. om/octo-org/octo-repo, a opção tags deve estar definida como docker.pkg.github.com/octo-org/octo-repo/octo-image:latest. Você pode definir uma única tag, conforme mostrado abaixo, ou especificar várias tags em uma lista.
  • push: Se definido como verdadeiro, a imagem será enviada por push para o registro, se este for construído com sucesso.
YAML
name: Publish Docker image
on:
  release:
    types: [published]
jobs:
  push_to_registry:
    name: Push Docker image to GitHub Packages
    runs-on: ubuntu-latest
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2
      - name: Log in to GitHub Docker Registry
        uses: docker/login-action@v1
        with:
          registry: docker.pkg.github.com
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build container image
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: |
            docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.sha }}
            docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.ref }}

Publicar imagens no Docker Hub e GitHub Package Registry

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

O fluxo de trabalho a seguir usa os passos das seções anteriores ("Publicar imagens no Docker Hube "Publicar imagens para GitHub Package Registry") para criar um único fluxo de trabalho que faz push em ambos os registros.

YAML
name: Publish Docker image
on:
  release:
    types: [published]
jobs:
  push_to_registries:
    name: Push Docker image to multiple registries
    runs-on: ubuntu-latest
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2
      - name: Log in to Docker Hub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - name: Log in to GitHub Docker Registry
        uses: docker/login-action@v1
        with:
          registry: docker.pkg.github.com
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Push to Docker Hub
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: my-docker-hub-namespace/my-docker-hub-repository:${{ github.ref }}
      - name: Build container image
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: docker.pkg.github.com/${{ github.repository }}/my-image:${{ github.ref }}

O fluxo de trabalho acima faz o check-out do repositório GitHub, usa o login-action duas vezes para fazer login em ambos os registros e, em seguida, usa a ação build-push-action duas vezes para criar e fazer push da imagem do Docker para o Docker Hub e GitHub Package Registry. Para ambas as etapas, ele marca a imagem do Docker criada com a referência do Git do evento do fluxo de trabalho. Este fluxo de trabalho é acionado na publicação de uma versão do GitHub. Portanto, a referência para ambos os registros será a tag do Git para a versão.

Esse documento ajudou você?Política de Privacidade

Ajude-nos a tornar esses documentos ótimos!

Todos os documentos do GitHub são de código aberto. Você percebeu que algo que está errado ou não está claro? Envie um pull request.

Faça uma contribuição

Ou, aprenda como contribuir.