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 recentes, acesse a documentação em inglês. Se houver problemas com a tradução desta página, entre em contato conosco.
O GitHub AE está atualmente sob versão limitada. Entre em contato com nossa Equipe de Vendas para saber mais.

Sobre os contêineres de serviço

Você pode usar contêineres de serviço para conectar bancos de dados, serviços web, memória cache e outras ferramentas ao seu fluxo de trabalho.

Sobre os contêineres de serviço

Os contêineres de serviço são contêineres Docker que fornecem uma forma simples e portátil para os seus serviços de hospedagem que você pode precisar testar ou operar a sua aplicação em um fluxo de trabalho. Por exemplo, o seu fluxo de trabalho pode precisar executar testes de integração que necessitem de acesso a um banco de dados e a uma memória cache.

Você pode configurar os contêineres de serviço para cada trabalho em um fluxo de trabalho. GitHub cria um novo contêiner Docker para cada serviço configurado no fluxo de trabalho e destrói o contêiner de serviço quando o trabalho é concluído. As etapas em um trabalho podem comunicar-se com todos os contêineres de serviço que fazem parte do mesmo trabalho. No entanto, você não pode criar e usar contêineres de serviço dentro de uma ação composta.

Observação: se seus fluxos de trabalho usam ações do contêiner Docker, contêineres de trabalho ou contêineres de serviço, você deve usar um executor do Linux:

  • Se você estiver usando executores hospedados em GitHub, você deverá usar um executor do Ubuntu.
  • Se você estiver usando executores auto-hospedados, você deve usar uma máquina Linux, pois seu executor e o Docker precisam ser instalados.

Comunicar-se com os contêineres de serviço

Você pode configurar trabalhos em um fluxo de trabalho para ser executados diretamente em uma máquina executora ou em um contêiner Docker. A comunicação entre o trabalho e seus contêineres de serviço é diferente, dependendo se um trabalho é executado diretamente na máquina executora ou em um contêiner.

Executar trabalhos em um contêiner

Ao executar trabalhos em um contêiner, GitHub conecta os contêineres de serviço ao trabalho suando as redes de ponte definidas pelo usuário do Docker. Para obter mais informações, consulte ""Usar redes de ponte" na documentação do Docker.

Executar o trabalho e os serviços em um contêiner simplifica o acesso à rede. Você pode acessar um contêiner de serviço usando a etiqueta que você configurar no fluxo de trabalho. O nome de host do contêiner do serviço é mapeado automaticamente de acordo com o nome da etiqueta. Por exemplo, se você criar um contêiner de serviço com a etiqueta redis, o nome de host do contêiner de serviço será redis.

Você não precisa configurar nenhuma porta para os contêineres de serviço. Por padrão, todos os contêineres que fazem parte da mesma rede do Docker expõem todas as portas entre si e nenhuma porta é exposta fora da rede do Docker.

Executar trabalhos na máquina executora

Ao executar trabalhos diretamente na máquina executora, você poderá acessar os contêineres de serviço usando localhost:<port> ou 127.0.0.1:<port>. GitHub configura a rede do contêiner para habilitar a comunicação a partir do contêiner de serviço com o host do Docker.

Quando um trabalho é executado diretamente em uma máquina executora, o serviço executado no contêiner do Docker não expõe suas portas ao trabalho no executor por padrão. Você deve mapear as portas no contêiner de serviço com o host do Docker. Para obter mais informações, consulte "Mapeando o host do Docker e as portas do contêiner de serviço".

Criar contêineres de serviço

Você pode usar a palavra-chave serviços para criar contêineres de serviço que fazem parte de um trabalho no seu fluxo de trabalho. Para obter mais informações, consulte trabalhos.<job_id>.serviços.

Este exemplo cria um serviço denominado redis em um trabalho denominado container-job. O host Docker neste exemplo é o contêiner node:16-bullseye.

YAML
name: Redis container example
on: push

jobs:
  # Label of the container job
  container-job:
    # Containers must run in Linux based operating systems
    runs-on: ubuntu-latest
    # Docker Hub image that `container-job` executes in
    container: node:16-bullseye

    # Service containers to run with `container-job`
    services:
      # Label used to access the service container
      redis:
        # Docker Hub image
        image: redis

Mapear o host do Docker e as portas do contêiner de serviço

Se o seu trabalho for executado em um contêiner do Docker, você não precisará mapear as portas no host ou no contêiner de serviço. Se o seu trabalho for executado diretamente na máquina executora, você precisará mapear todas as portas do contêiner de serviço necessárias com as portas na máquina executora do host.

Você pode mapear as portas dos contêineres de serviço com o host do Docker usando a palavra-chave portas. Para obter mais informações, consulte trabalhos.<job_id>.serviços.

Valor das portasDescrição
8080:80Mapeia a porta 80 TCP no contêiner com a porta 8080 no host do Docker.
8080:80/udpMapeia a porta 80 UDP no contêiner com a porta 8080 no host do Docker.
8080/udpMapeia a porta UDP escolhida aleatoriamente no contêiner com a porta 8080 UDP no host do Docker.

Ao mapear portas usando a palavra-chave portas, GitHubusa o comando --publicar para publicar as portas do contêiner no host do Docker. Para obter mais informações, consulte "Rede do contêiner do Docker" na documentação do Docker.

Ao especificar a porta do host do Docker mas não a porta do contêiner, a porta do contêiner será atribuída aleatoriamente a uma porta livre. GitHub define a porta do contêiner atribuída no contexto do contêiner de serviço. Por exemplo, para um contêiner de serviço redis, se você configurou a porta 5432 do host do Docker, você poderá acessar a porta do contêiner correspondente usando o contexto job.services.redis.ports[5432]. Para obter mais informações, consulte "Contextos".

Exemplo de mapeamento de portas Redis

Este exemplo mapeia a porta 6379 do contêiner de serviço redis com a porta 6379 do host do Docker.

YAML
nome: Exemplo de serviço Redis
em: push

trabalhos:
  # Etiqueta do trabalho do contêiner
  runner-job:
    # YoVocê deve usar um ambiente Linux ao usar os contêineres de serviço ou os trabalhos do contêiner
    runs-on: ubuntu-latest

    # Contêineres de serviço a ser executados com `runner-job`
    serviços:
      # Etiqueta usada para acessar o contêiner de serviço
      redis:
        # Imagem do Docker Hubm
        image: redis
        #
        portas:
          # Abre a porta 6379 tcp no host e no contêiner de serviço
          - 6379:6379

Leia mais