MongoDB – Criar 3 containers usando docker-compose
- Postado por Adriano Bonacin
- Categorias mongodb
- Data 16/01/2022
- Comentários 0 comentário
Como falamos anteriormente, ReplicaSet é a forma como o MongoDB consegue atingir redundância e alta disponibilidade. Além disso, é a recomendação para qualquer ambiente de produção. Agora, nosso ambiente ainda precisa evoluir. Já vimos como criar nosso ReplicaSet rodando com apenas um membro, chegou a hora de adicionar mais hosts nesta configuração. Vamos criar containers com Docker Compose.
Limpando Containers
Para usarmos apenas containers gerenciados pelo docker-compose, vou remover o antigo mymongo1 e incluí-lo nesta configuração. Os comandos abaixo vão matar e apagar TODOS os containers, use com moderação.
abonacin@Adrianos-MacBook-Pro ~ % docker kill $(docker ps -q)
28d795e65f8c
abonacin@Adrianos-MacBook-Pro ~ % docker rm $(docker ps -a -q)
28d795e65f8c
Docker Compose
Segundo a documentação, Docker Compose é uma ferramenta que foi desenvolvida para ajudar a gerenciar aplicações multi-containers. Com o Compose, você cria um arquivo YAML para definir os serviços e com um simples comando tudo é colocado de pé ou tudo derrubado junto.
Um outro motivo para usá-lo é porque precisamos fixar seus IPs. Na forma manual que fizemos, o container sobe e pega o primeiro IP disponível (aqui foi o 172.17.0.2). Assim, se o start dos containers não seguir sempre a mesma ordem, o container poderá ter um IP diferente. Com o docker-compose vamos criar uma subnet e conseguir atribuir o IP desejado para cada container. Vamos lá, crie uma pasta chamada compose e nela crie um arquivo chamado docker-compose.yml. Ficará assim:
abonacin@Adrianos-MacBook-Pro compose % cat docker-compose.yml
version: "3.9"
services:
mongodb1:
image: centos:centos8
container_name: mymongo1
hostname: mymongo1
tty: true
networks:
yadaxnetwork:
ipv4_address: 172.100.0.11
mongodb2:
image: centos:centos8
container_name: mymongo2
hostname: mymongo2
tty: true
networks:
yadaxnetwork:
ipv4_address: 172.100.0.12
mongodb3:
image: centos:centos8
container_name: mymongo3
hostname: mymongo3
tty: true
networks:
yadaxnetwork:
ipv4_address: 172.100.0.13
networks:
yadaxnetwork:
ipam:
config:
- subnet: 172.100.0.0/16
Em seguida, vamos subi-los. Duas observações que gostaria de fazer. Ainda vamos ter que fazer a instalação manualmente, então o container precisa ter um shell (tty:true) para que não encerre logo após a execução. E na chamada de start do docker-compose, vamos usar a opção -d, para que rode em background e libere nossa sessão. Veja que ao final nossos containers estão UP:
abonacin@Adrianos-MacBook-Pro compose % docker-compose up -d
Creating mymongo1 ... done
Creating mymongo2 ... done
Creating mymongo3 ... done
abonacin@Adrianos-MacBook-Pro compose % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
85411d83aa93 centos:centos8 "/bin/bash" 41 seconds ago Up 40 seconds mymongo1
2ab51630546e centos:centos8 "/bin/bash" 42 seconds ago Up 40 seconds mymongo3
e1c4554b2c3a centos:centos8 "/bin/bash" 42 seconds ago Up 40 seconds mymongo2
Podemos conferir os IPs:
abonacin@Adrianos-MacBook-Pro compose % docker exec -it mymongo1 /bin/hostname -i
172.100.0.11
abonacin@Adrianos-MacBook-Pro compose % docker exec -it mymongo2 /bin/hostname -i
172.100.0.12
abonacin@Adrianos-MacBook-Pro compose % docker exec -it mymongo3 /bin/hostname -i
172.100.0.13
Agora temos 3 containers e conseguimos criar uma configuração ReplicaSet com mais membros, que é o que faremos no próximo artigo. Até la.
Tag:mongodb