Executando verificação de segurança...
1

Como rodar docker-compose tendo vários containers em repositórios diferentes

Hello everybody!

Estou com um projeto que roda em micro serviços, todos eles tem seus repositórios independentes, cada um com seu Dockerfile, docker-compose.yml e tudo mais. São 14 serviços independentes.

O problema é que quando quero rodar todo o ecossistema preciso ir de pasta em pasta e executar os respectivos docker compose up em cada serviço, além de ajustar váriaveis de ambiente como portas, urls e etc em cada projeto.

Teria alguma maneira de fazer uma espécie de "super" docker-compose.yml com todos os containers, networks e tudo mais, e quando quisesse rodar o ecossistema daria um docker compose up e isso subiria todos os containers?

Obrigado por ler até aqui :)

Carregando publicação patrocinada...
3

Pegando o gancho do que falou o @glink aí em cima, eu tenho o mesmo "problema" em alguns projetos e também costumo dividí-los em repositórios, cada um com suas definições.

Minha recomendação pra juntar o útil ao agradável, é criar um repositório no Git contendo submódulos com todos os repositórios e, na raiz desse repositório, criar um docker-compose completo com todos. Como na imagem abaixo, de um repositório meu:

Github

Nesse docker-compose você coloca todos os seus serviços, networks e volumes. Recomendo, caso julgue necessário, criar um arquivo .env com todas as variáveis de ambiente compartilhadas pra facilitar sua vida e referenciar no compose como ${NOME_VARIAVEL}. Assim você evita ter que alterar todos os serviços caso precise alterar uma variável compartilhada por mais de um.

Espero ter ajudado.

2

Olá boa tarde! To pensando em implementar algo nesse sentido mesmo man, no meu caso só não vou subir pro git, mas vou deixar esse docker-compose.ymlna minha máquina aqui, ele vai ser meio que um Frankestein de junção dos outros docker-compose de cada projeto, mas acredito que vai funcionar, vlww!

1
1

A ideia do docker-composer é justamente agrupar esses diversos microserviços, criar dependencia entre eles, conectar tudo em rede, etc.. etc...

Geralmente você vai ter um docker-composer na pasta raiz do projeto e dentro desse composer você cria os "services" pra cada micro serviço que estão nas subpastas.

Dai com docker-compose up -d voce sobre tudo de uma vez e com docker-compose down você derruba tudo.

Fez sentido ou seu caso é mais específico?
Se for diferente, compartilha mais detalhes pra gente bater cabeça juntos

1

Olá boa tarde! Sim, Tenho um docker-compose em cada repositório, o cenário é bem parecido com o que o @pauloleal falou ali, ou seja, tenho vários repositórios separados mas que os serviços se comunicam entre si, e quando quero rodar localmente todo o ecossistema de microservices, preciso abrir cada pasta e rodar o docker compose up, só que são 14 serviços, então são 14 terminais abertos, com eu rodando docker compose up em cada um deles.
Dai estava maquinando alguma forma de poder startar toda essa galera de uma vez, estava em dúvida se tinha alguma ferramente que fazia isso, ou alguma boa prática pra essa situação, mas a solução que estou pensando aqui tá sendo uma coisa parecida com o que o @pauloleal sugeriu, vou criar um docker-compose.yml na minha pasta raiz onde estão todos os repositórios/pastas de cada serviço, e pegaria cada docker-compose.yml de cada projeto e juntaria num "super docker-compose.yml" pra eu startar por ele, dai ele subiria os 14 containers numa pancada só.
O que acha?

1

Aparentemente você não vai precisar copiar o conteúdo de cada "sub docker-compose".

Nesse link eles tratam da funcionalidade "extend" do compose.
https://stackoverflow.com/questions/55650342/import-docker-compose-file-in-another-compose-file/55652819

Então ficaria algo assim no seu primeiro projeto

services:
  nginx_a:
     image: nginx:latest
     container_name: nginx
     ports:
       - 81:80
       - 1443:443

E no seu diretorio raiz:

services:
   nginx_projeto_a:
      extends:
         file: projeto-a/docker-compose.yml.yml
         service: nginx_a
   nginx_projeto_b:
      extends:
         file: projeto-b/docker-compose.yml.yml

Testa ai e lembra de dar um feedback aqui se funcionou ou não!

1

Voltando aqui pra falar um pouco sobre a solução, li sobre a documentação do extends no site do docker lá mesmo, comecei implementar juntando alguns containers/serviços aqui, mas acabei caindo em um problema relacionado ao depends_on, que não pode ser usado nesse escopo, (não tenho certeza, mas foi o que entendi), ele só poderia ser usado nos docker-compose.yml filhos, e vi que alguns serviços estão sem um docker-compose.yml funcional, então estou corrigindo isso, e eles estando funcionais, vou seguir mais a frente com a implementação do extends.

E aproveitando, alguns serviços estão como network_mode: host, pois estou conectando eles a bancos rodando na minha máquina, teria algum conflito nesse sentido?

1