{"meta":{"title":"Publicando imagens do Docker","intro":"Neste tutorial, você aprenderá a publicar imagens do Docker em um registro, como Docker Hub ou GitHub Packages, como parte do fluxo de trabalho de CI (integração contínua).","product":"GitHub Actions","breadcrumbs":[{"href":"/pt/enterprise-server@3.17/actions","title":"GitHub Actions"},{"href":"/pt/enterprise-server@3.17/actions/tutorials","title":"Tutoriais"},{"href":"/pt/enterprise-server@3.17/actions/tutorials/publish-packages","title":"Publicar pacotes"},{"href":"/pt/enterprise-server@3.17/actions/tutorials/publish-packages/publish-docker-images","title":"Publicar imagens do Docker"}],"documentType":"article"},"body":"# Publicando imagens do Docker\n\nNeste tutorial, você aprenderá a publicar imagens do Docker em um registro, como Docker Hub ou GitHub Packages, como parte do fluxo de trabalho de CI (integração contínua).\n\n## Introdução\n\nEste guia mostra como criar um fluxo de trabalho que executa um build do Docker e, em seguida, publica imagens do Docker para Docker Hub ou GitHub Packages. Com um único fluxo de trabalho, você pode publicar imagens em um único registro ou em vários registros.\n\n> \\[!NOTE]\n> Se você quiser fazer push para outro registro Docker de terceiros, o exemplo na seção [Publicando imagens no GitHub Packages](#publishing-images-to-github-packages) poderá servir como um bom modelo.\n\n## Pré-requisitos\n\nRecomendamos 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 saber mais, confira [Escrevendo fluxos de trabalho](/pt/enterprise-server@3.17/actions/how-tos/write-workflows).\n\nVocê também pode achar útil ter um entendimento básico do seguinte:\n\n* [Usar segredos em ações do GitHub](/pt/enterprise-server@3.17/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)\n* [Usar GITHUB\\_TOKEN para autenticação em fluxos de trabalho](/pt/enterprise-server@3.17/actions/tutorials/authenticate-with-github_token)\n* [Trabalhando com o registro do Docker](/pt/enterprise-server@3.17/packages/working-with-a-github-packages-registry/working-with-the-docker-registry)\n\n## Sobre a configuração da imagem\n\nEste guia pressupõe que você tenha uma definição completa para uma imagem do Docker armazenada em um GitHub repositório. 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.\n\nVocê 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, consulte [Trabalhando com o registro de contêiner](/pt/enterprise-server@3.17/packages/working-with-a-github-packages-registry/working-with-the-container-registry#labelling-container-images).\n\nNeste 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`](https://github.com/marketplace/actions/build-and-push-docker-images).\n\n> \\[!NOTE]\n> GitHub Actions em GitHub Enterprise Server pode ter acesso limitado a ações em GitHub.com ou GitHub Marketplace. Para obter mais informações, consulte [Gerenciando o acesso a ações de GitHub.com](/pt/enterprise-server@3.17/admin/managing-github-actions-for-your-enterprise/managing-access-to-actions-from-githubcom) e contate o GitHub Enterprise administrador do site.\n\n## Publicando imagens no Docker Hub\n\n> \\[!NOTE]\n> O Docker Hub normalmente impõe limites de taxa em operações de push e pull, o que afetará os trabalhos em executores auto-hospedados. No entanto, executores hospedados pelo GitHub não estão sujeitos a esses limites com base em um contrato entre o GitHub e o Docker.\n\nVocê pode acionar um fluxo de trabalho para publicar sua imagem sempre que criar uma nova versão no GitHub. O fluxo de trabalho no exemplo abaixo é executado quando o evento `release` é disparado com o tipo de atividade `published`.\n\nNo exemplo de fluxo de trabalho abaixo, usamos as ações do Docker `login-action` e `build-push-action` para criar a imagem do Docker e, se o build for bem-sucedido, efetuar push da imagem compilada para Docker Hub.\n\nPara enviar por push para Docker Hub, você precisará ter uma conta Docker Hub e ter um repositório Docker Hub criado. Para obter mais informações, consulte [Envio de uma imagem de contêiner do Docker para o Docker Hub](https://docs.docker.com/docker-hub/quickstart/#step-3-build-and-push-an-image-to-docker-hub) na documentação do Docker.\n\nAs opções de `login-action` necessárias para Docker Hub são:\n\n* `username` e `password`: este é seu nome de usuário e senha Docker Hub. Recomendamos armazenar seu nome de usuário e senha Docker Hub como segredos para que eles não sejam expostos no arquivo de fluxo de trabalho. Para saber mais, confira [Usar segredos em ações do GitHub](/pt/enterprise-server@3.17/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).\n\nA opção `metadata-action` necessária para Docker Hub é:\n\n* `images`: o namespace e o nome da imagem do Docker que você está compilando/enviando por push para o Docker Hub.\n\nAs opções de `build-push-action` necessárias para Docker Hub são:\n\n* `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.\n* `push`: se isso for definido como `true`, a imagem será enviada por push para o registro se for compilada com sucesso.\n\n```yaml copy\n# Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.\n# São fornecidas por terceiros e regidas por\n# termos de serviço, política de privacidade e suporte separados\n# online.\n\n# O GitHub recomenda fixar ações em um SHA de commit.\n# Para obter uma versão mais recente, você precisará atualizar o SHA.\n# Você também pode fazer referência a uma marca ou branch, mas a ação pode ser alterada sem aviso.\n\nname: Publish Docker image\n\non:\n  release:\n    types: [published]\n\njobs:\n  push_to_registry:\n    name: Push Docker image to Docker Hub\n    runs-on: [self-hosted]\n    permissions:\n      packages: write\n      contents: read\n      \n      \n    steps:\n      - name: Check out the repo\n        uses: actions/checkout@v6\n\n      - name: Log in to Docker Hub\n        uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a\n        with:\n          username: ${{ secrets.DOCKER_USERNAME }}\n          password: ${{ secrets.DOCKER_PASSWORD }}\n\n      - name: Extract metadata (tags, labels) for Docker\n        id: meta\n        uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7\n        with:\n          images: my-docker-hub-namespace/my-docker-hub-repository\n\n      - name: Build and push Docker image\n        id: push\n        uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671\n        with:\n          context: .\n          file: ./Dockerfile\n          push: true\n          tags: ${{ steps.meta.outputs.tags }}\n          labels: ${{ steps.meta.outputs.labels }}\n\n```\n\nO fluxo de trabalho acima verifica o repositório do GitHub usa o `login-action` para registrar em log no Registro e, em seguida, usa a ação do `build-push-action` para: criar uma imagem do Docker baseada no `Dockerfile` do repositório; envie por push a imagem par o Docker Hub e aplique a marcação à imagem.\n\n## Publicando imagens para GitHub Packages\n\n> \\[!NOTE] Atualmente, o Container registry está em prévia pública no GitHub Enterprise Server e sujeito a alterações.\n\nO GitHub Packages e o isolamento de subdomínio devem ser habilitados para usar o Container registry. Para saber mais, confira [Trabalhando com o registro de contêiner](/pt/enterprise-server@3.17/packages/working-with-a-github-packages-registry/working-with-the-container-registry).\n\nVocê pode acionar um fluxo de trabalho para publicar sua imagem sempre que criar uma nova versão no GitHub. O fluxo de trabalho no exemplo abaixo é executado quando uma alteração é enviada por push para o branch `release`.\n\nNo fluxo de trabalho de exemplo abaixo, usamos as ações Docker `login-action`,  e `build-push-action` para criar a imagem do Docker e, se o build for bem-sucedido, enviar a imagem construída para GitHub Packages.\n\nAs opções `login-action` necessárias para GitHub Packages são:\n\n* `registry`: deve ser definido como `containers.HOSTNAME`.\n* `username`: você pode usar o `${{ github.actor }}` contexto para usar automaticamente o nome de usuário do usuário que disparou a execução do fluxo de trabalho. Para saber mais, confira [Referência de contextos](/pt/enterprise-server@3.17/actions/reference/workflows-and-actions/contexts#github-context).\n* `password`: use o segredo `GITHUB_TOKEN` gerado automaticamente para a senha. Para saber mais, confira [Usar GITHUB\\_TOKEN para autenticação em fluxos de trabalho](/pt/enterprise-server@3.17/actions/tutorials/authenticate-with-github_token).\n\nAs opções necessárias para `build-push-action` são GitHub Packages:\n\n* `push`: se definido como `true`, a imagem será enviada por push para o Registro se for criada com êxito.\n* `tags`: precisa ser definido no formato `containers.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION`.\n\n  Por exemplo, para uma imagem nomeada `octo-image` armazenada em GitHub Enterprise Server`https://HOSTNAME/octo-org/octo-repo`, a opção `tags` deve ser definida como `containers.HOSTNAME/octo-org/octo-repo/octo-image:latest` . Você pode definir uma única marca, conforme mostrado abaixo, ou especificar várias marcas em uma lista.\n\n> \\[!NOTE]\n>\n> * Esse fluxo de trabalho usa ações que não são certificadas por GitHub. Elas são fornecidas por terceiros e regidar por termos de serviço, política de privacidade e documentação de suporte separados.\n> * GitHub recomenda fixar ações em um SHA de confirmação. 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.\n\n```yaml annotate copy\n#\nname: Create and publish a Docker image\n\n# Configures this workflow to run every time a change is pushed to the branch called `release`.\non:\n  push:\n    branches: ['release']\n\n# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.\nenv:\n  REGISTRY: containers.HOSTNAME\n  IMAGE_NAME: ${{ github.repository }}\n\n# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.\njobs:\n  build-and-push-image:\n    runs-on: [self-hosted]\n    # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.\n    permissions:\n      contents: read\n      packages: write\n      \n      \n      #\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v6\n      # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.\n      - name: Log in to the Container registry\n        uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1\n        with:\n          registry: ${{ env.REGISTRY }}\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n      # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` \"meta\" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels.\n      - name: Extract metadata (tags, labels) for Docker\n        id: meta\n        uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7\n        with:\n          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}\n      # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages.\n      # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see [Usage](https://github.com/docker/build-push-action#usage) in the README of the `docker/build-push-action` repository.\n      # It uses the `tags` and `labels` parameters to tag and label the image with the output from the \"meta\" step.\n      - name: Build and push Docker image\n        id: push\n        uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4\n        with:\n          context: .\n          push: true\n          tags: ${{ steps.meta.outputs.tags }}\n          labels: ${{ steps.meta.outputs.labels }}\n      \n```\n\nO fluxo de trabalho acima é acionado por um push para o branch da \"versão\". Ele verifica o repositório GitHub e usa o `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.\n\n## Publicando imagens em Docker Hub e GitHub Packages\n\n> \\[!NOTE] Atualmente, o Container registry está em prévia pública no GitHub Enterprise Server e sujeito a alterações.\n\nO GitHub Packages e o isolamento de subdomínio devem ser habilitados para usar o Container registry. Para saber mais, confira [Trabalhando com o registro de contêiner](/pt/enterprise-server@3.17/packages/working-with-a-github-packages-registry/working-with-the-container-registry).\n\nEm 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.\n\nO fluxo de trabalho de exemplo a seguir usa as etapas das seções anteriores (Publicando imagens no [Docker Hub](#publishing-images-to-docker-hub) e Publicando imagens em [GitHub Packages](#publishing-images-to-github-packages)) para criar um único fluxo de trabalho que faz push para ambos os registros.\n\n```yaml copy\n# Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.\n# São fornecidas por terceiros e regidas por\n# termos de serviço, política de privacidade e suporte separados\n# online.\n\n# O GitHub recomenda fixar ações em um SHA de commit.\n# Para obter uma versão mais recente, você precisará atualizar o SHA.\n# Você também pode fazer referência a uma marca ou branch, mas a ação pode ser alterada sem aviso.\n\nname: Publish Docker image\n\non:\n  release:\n    types: [published]\n\njobs:\n  push_to_registries:\n    name: Push Docker image to multiple registries\n    runs-on: [self-hosted]\n    permissions:\n      packages: write\n      contents: read\n    steps:\n      - name: Check out the repo\n        uses: actions/checkout@v6\n\n      - name: Log in to Docker Hub\n        uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a\n        with:\n          username: ${{ secrets.DOCKER_USERNAME }}\n          password: ${{ secrets.DOCKER_PASSWORD }}\n\n      - name: Log in to the Container registry\n        uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1\n        with:\n          registry: containers.HOSTNAME\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Extract metadata (tags, labels) for Docker\n        id: meta\n        uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7\n        with:\n          images: |\n            my-docker-hub-namespace/my-docker-hub-repository\n            containers.HOSTNAME/${{ github.repository }}\n\n      - name: Build and push Docker images\n        id: push\n        uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671\n        with:\n          context: .\n          push: true\n          tags: ${{ steps.meta.outputs.tags }}\n          labels: ${{ steps.meta.outputs.labels }}\n```\n\nO fluxo de trabalho acima faz check-out do repositório do GitHub repository, usa `login-action` duas vezes para fazer logon nos dois registros e gera marcas e rótulos com a ação `metadata-action`.\nEm seguida, a ação `build-push-action` cria e envia por push a imagem do Docker para o Docker Hub e o Container registry.\n\n## Atividade prática\n\nPratique a publicação de imagens Docker com o exercício [Publicação de Imagens Docker](https://github.com/skills/publish-docker-images)GitHub Skills.\n\nNeste exercício, você aprenderá a:\n\n* Autentique-se em GitHub Packages usando o `GITHUB_TOKEN`.\n* Criar e publicar imagens de contêiner no Container registry (`ghcr.io`).\n* Use ações oficiais do Docker, como `docker/login-action`, `docker/build-push-action`e `docker/setup-buildx-action`.\n* Gere marcações automaticamente com `docker/metadata-action` baseado em ramificações, pull requests e versões.\n* Crie funcionalidades, pull requests e versões com o versionamento de contêiner apropriado."}