Como expor vários aplicativos de contêiner na mesma porta com balanceamento de carga

Como expor vários aplicativos de contêiner na mesma porta com balanceamento de carga
Docker Compõe o utilitário de linha de comando da solução Docker nos permite executar vários aplicativos de contêineres e outros microsserviços em contêineres separados. Mas é impossível executar diretamente mais de um recipiente na mesma porta. Para esse fim, os usuários do Docker usam técnicas diferentes, como algum esquema de roteamento, SO_REUSEPORT ou Balanceamento de proxy/carga reverso.

Este blog ilustrará como expor e implantar vários aplicativos de contêineres na mesma porta usando o balanceamento de carga.

Como expor vários aplicativos de contêiner na mesma porta com balanceamento de carga?

O balanceamento de carga ou proxy reverso é uma técnica para distribuir o tráfego de diferentes contêineres em um servidor. O balanceamento de carga pode usar algoritmos de roteamento diferentes, como o algoritmo Round Robin, para alocar spam de tempo para executar o primeiro contêiner, depois o segundo contêiner e voltar novamente ao primeiro contêiner, e assim por diante. Isso pode aumentar a disponibilidade, capacidade e confiabilidade do aplicativo.

Para a ilustração, utilize o procedimento mencionado.

Etapa 1: Crie Dockerfile

Primeiro, crie um DockerFile para recipiente do aplicativo. Por exemplo, definimos as instruções para contêiner o “principal.ir" aplicativo:

De Golang: 1.8
Workdir/go/src/app
Cópia principal.ir .
Run Go Build -O WebServer .
PONTO DE ENTRADA ["./servidor web"]

Aqui, temos dois diferentes “principal.ir”Programas em dois diretórios diferentes. Em nosso cenário, o primeiro programa usará o Dockerfile para configurar o serviço:

O segundo programa também tem o mesmo Dockerfile em seu diretório. Usando este arquivo, construímos a nova imagem do Docker “Go1-imagem”Isso será usado para configurar o segundo serviço no arquivo de composição. Para criar ou construir a imagem, você pode examinar nosso artigo associado:

Etapa 2: Crie arquivo de composição

Em seguida, crie um arquivo de composição chamado “Docker-Compose.yml”Arquivo que contém as seguintes instruções:

  • ““Serviços"Configure os três serviços diferentes"rede","Web1", e "nginx”. O serviço "web" executará o primeiro programa, o serviço "Web1" executará o segundo programa e "nginx”Será executado como saldo de carga para equilibrar ou gerenciar o tráfego de diferentes contêineres.
  • "Web" usará o Dockerfile para recipiente do serviço. No entanto, o serviço "web1" usará a imagem "GO1-IMG”Para recipilar o segundo programa.
  • ““volumes”A chave é usada para anexar o nginx.arquivo conf no contêiner nginx para montar os serviços.
  • ““depende de"Key especifica que"nginx"Serviço depende dos serviços" web "e" web1 ".
  • ““portas”Key define a porta exposta do Nginx Load Balancer, onde os serviços upstream executarão:
Versão: "Alpine"
Serviços:
rede:
construir: .
Web1:
Imagem: GO1-IMG
nginx:
Imagem: Nginx: mais recente
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf: ro
depende de:
- rede
- Web1
Portas:
- 8080: 8080

Etapa 3: Crie “nginx.arquivo conf ”

Depois disso, crie o “nginx.conf”Arquive e configure os serviços a montante, a porta de escuta do balanceador de carga e defina o proxy“http: // all/”Para gerenciar os serviços upstream:

usuário nginx;
Eventos
trabalhador_connections 1000;

http
a montante tudo
Web do servidor: 8080;
Servidor Web1: 8080;

servidor
Ouça 8080;
Localização /
proxy_pass http: // all/;


Etapa 4: disparar os recipientes

Executar o “Docker-compor”Comando para iniciar os serviços em contêineres separados. Aqui "-escala”A opção é usada para gerar as duas réplicas do primeiro ou“rede" serviço:

Docker -Compose Up -Cale web = 2

Para a verificação, vá para a porta exposta do “nginx”Contêiner de serviço e verifique se está aceitando o fluxo de serviços especificados ou não:

A partir da saída acima, pode-se observar que executamos com sucesso vários contêineres ou serviços na mesma porta.

Conclusão

Para executar ou expor os múltiplos aplicativos de contêiner na mesma porta usando um balanceador de carga/proxy reverso, primeiro, crie um “nginx.conf”Arquivo para configurar as configurações de balanceador de carga, como serviços de upstreaming, portas de escuta e proxy para a montante do serviço. Em seguida, configure o serviço de balanceamento de carga no arquivo de composição. Este blog demonstrou como expor e executar vários contêineres ou serviços na mesma porta.