DOCKER SERIES: Final … COMPOSE: Multicontainers
Ao longo desta série testemunhamos a execução de diversos containers através do comando específico chamado docker run
. Além disso, também vimos que é totalmente plausível conectar dois ou mais containers em uma mesma rede, por meio do comando docker network
. Bem, e agora? Que bom que perguntou, pois hoje veremos como converter nosso trabalho de “manual” para “automático“. Hã?! Como assim? Ao invés de executar vários comandos para subir containers e depois conectá-los entre si, a partir deste momento, toda essa coordenação será feita pelo próprio DOCKER via COMPOSE. Trata-se de um utilitário desenvolvido pela empresa para lidar com ambientes distribuídos em múltiplos containers. Nós iremos pegar aquele exemplo da aula passada, e transformá-lo em um script para ser lido pelo docker-compose
. Mas, primeiro …
DOCKER COMPOSE : Como instalar
Caso você esteja no Windows ou Mac, tal aplicativo já vem embarcado no processo de instalação, e está pronto para uso imediato. Entretanto, no Linux as coisas são um pouco diferentes, e para isso você terá que instalá-lo manualmente. Não perca tempo, abra o terminal e execute o seguinte:
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} mkdir -p $DOCKER_CONFIG/cli-plugins curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose docker compose version
YAML : docker-compose.yml
Sim! Exatamente! A linguagem utilizada para escrever “scripts” para o DOCKER COMPOSE é o velho e conhecido YAML. Analogamente aos playbooks do ANSIBLE, aqui também seguimos uma estrutura e lógica para pautar o nosso script. Essas regrinhas são muito importantes para o êxito do objetivo final. Sem mais delongas, vamos lá então:
(Crie um novo arquivo chamado docker-compose.yml
)
touch docker-compose.yml
(Abra-o no VIM e edite conforme o conteúdo abaixo)
version: "3.4" services: mongodb: image: mongo:4.4.6 container_name: meu-mongo networks: - compose-bridge alurabooks: image: aluradocker/alura-books:1.0 container_name: minha-biblioteca networks: - compose-bridge ports: - 3000:3000 networks: compose-bridge: driver: bridge
(Retornar ao terminal e efetivamente executar o comando docker-compose
)

sudo docker-compose up

(Acessar via navegador de internet)
http://localhost:3000
(Semear o banco de dados)
http://localhost:3000/seed
(Atualizar a página novamente)

DEPENDS_ON : Aperfeiçoando e complementando
Até então, mesmo que de forma automática, nossos containers estão subindo indefinidamente. Em outras palavras, fora de sequência. E isso às vezes não é tão bom ou recomendável, podendo ocasionar erros e problemas na aplicação. Para evitar maiores dores de cabeça, utilizaremos uma instrução chamada depends_on
, que cria dependências entre os serviços listados. Por exemplo:
version: "3.4" services: mongodb: image: mongo:4.4.6 container_name: meu-mongo networks: - compose-bridge alurabooks: image: aluradocker/alura-books:1.0 container_name: minha-biblioteca networks: - compose-bridge ports: - 3000:3000 depends_on: - mongodb networks: compose-bridge: driver: bridge
docker-compose up

SALVA PARA ESTUDAR DEPOIS!!! 🤓
REFERÊNCIAS:
https://docs.docker.com/compose/install/linux/
https://docs.docker.com/compose/compose-file/
https://www.rockyourcode.com/how-to-install-docker-compose-v2-on-linux-2021/