3. Quem sou??
Evandro Silvestre - silvestree@gmail.com
• Primeiro código aos 15 anos
• Trabalha na Geofusion há 8 anos
• Gerente de Engenharia
• Gamer nas horas vagas
• Futuro pai de primeira viagem :)
5. Premissas
• Mesmo container para todos os ambientes (dev/hom/prod)
○ Inclusive na máquina do desenvolvedor
• Parametrização dinâmica
• Modelo não invasivo: a aplicação não precisa conhecer regras de
infraestrutura
• Pipeline automatizado
• Instâncias EC2 “burras”
• Logs Centralizados
10. Empurando para o Registry
• Docker Registry: https://docs.docker.com/registry/
• Repositório oficial dos docker
• O versionamento pode ser por tag ou
• Versionamos a cada build usando o hash do commit
12. Obtendo parâmetros
• Consul.io: https://www.consul.io/
• Na maioria das vezes usamos a API rest, mas é possível usar Spring Cloud
• Todos os ambientes (dev/hom/prod) possuem a mesma estrutura de
parâmetros, porém com valores diferentes
• Guardamos senha de bancos criptografadas com chaves de criptografia
específicas para cada ambiente
15. Obtendo parâmetros
if [ ! -z $CONSUL ]; then
echo "Using Consul to properties"
NAME=$(curl -s http://$CONSUL/v1/kv/devopsweek/name?raw)
JAVA_OPTIONS="-Dname='$NAME'"; export JAVA_OPTIONS
fi
/entrypoint.sh
18. Descoberta de Serviço
• Registrator: http://gliderlabs.com/registrator/latest/
• Serviço de registro não invasivo
• Usamos o consul.io, mas funciona com vários serviços de descoberta
• O registrator fica monitorando o socket do docker e registrando
automaticamente os container que sobem/desce,
• É possível usar de diversas maneiras
○ Como serviço de DNS
○ Configurando um load balance (Veja consul-template:
https://github.com/hashicorp/consul-template)
19. Descoberta de Serviço
docker run -it
--net=host
--volume=/var/run/docker.sock:/tmp/docker.sock
gliderlabs/registrator:latest
consul://localhost:8500
23. Log Centralizado
• Docker Log Driver: https://docs.docker.com/engine/admin/logging/overview/
• Serviço de log centralizado não invasivo
• A aplicação não precisa se preocupar com log, só mandar para a saída padrão
26. Deploy Remoto - docker-machine
• Usando o Docker Machine: https://docs.docker.com/machine/
• Todo o processo é automatizado pela nossa ferramenta de Continuous
Delivery
• O Docker Machine conecta no servidor hospedeiro
• Baixa a última versão do Docker Registry e executa
28. Deploy Remoto - Spot
• Usando EC2 Spot: https://aws.amazon.com/pt/ec2/spot/
• Alguns deploys são feitos criando uma Spot padrão na Amazon
• Durante o boot, instalamos o docker e rodamos o container
• Todo o processo é gerenciado pelo Puppet
• Usamos spots para diminuir - e muito - o nosso custo
• Desligamos a instância anterior (se houver)
30. Instâncias EC2 “Burras”
• A maioria das nossas instâncias na Amazon são “burras”
• Ou seja, elas não sabem o que estão rodando
○ só precisam rodar um docker
○ falar com o consul.io e nossa ferramenta de Continous Delivery
• Algumas instâncias precisam de “inteligência”, como um tunning de EBS