SlideShare a Scribd company logo
1 of 34
Download to read offline
Source-to-Container
No mundo real
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 :)
Estamos descobrindo maneiras
melhores de entregar software
fazendo-o nós mesmos e ajudando
outros a fazê-lo
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
Construindo
Docker
Construindo Docker
• Maven Plugin da Fabric8io: https://dmp.fabric8.io/
• Construímos o código e adicionamos o artefato na imagem docker
○ Construindo: mvn docker:build
○ Executando: mvn docker:start
○ Empurrando: mvn docker:push
Construindo Docker
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.14.1</version>
<configuration>
<images>
<image>
<name>devops-week</name>
<registry>path_to_registry</registry>
<run>
<ports>
<port>8080:8080</port>
</ports>
<env>
<JAVA_OPTIONS>-Dname=xpto2</JAVA_OPTIONS>
</env>
</run>
<build>
<tags>
<tag>latest</tag>
<tag>${project.version}</tag>
</tags>
<assembly>
<mode>dir</mode>
<exportBasedir>true</exportBasedir>
<dockerFileDir>.</dockerFileDir>
<descriptor>assembly.xml</descriptor>
</assembly>
</build>
</image>
</images>
</configuration>
</plugin>
Construindo
Docker
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
Construindo
Docker
Parâmetros
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
Obtendo parâmetros
Subindo Consul.io
docker run --net host 
-it -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt":
true, "datacenter" : "devopsweek",
"node_name":"devopsweek"}' 
-p 8500:8500 -p 53:53/tcp -p 53:53/udp 
-v $(pwd)/consul/:/consul/data/ 
consul agent -server -bind=127.0.0.1 -client=127.0.0.1
-ui -bootstrap-expect=1
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
Rodando Docker
docker run -it -p 8080:8080 -e CONSUL=localhost:8500
devops-week
Construindo
Docker
Parâmetros
Descoberta de
Serviço
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)
Descoberta de Serviço
docker run -it 
--net=host 
--volume=/var/run/docker.sock:/tmp/docker.sock 
gliderlabs/registrator:latest 
consul://localhost:8500
Descoberta de Serviço
Descoberta de Serviço - Configurando
docker run -it
-e SERVICE_8080_NAME=app_devopsweek
-e SERVICE_TAGS=cluster01
-p 8080:8080 -e CONSUL=localhost:8500 devops-week
Construindo
Docker
Parâmetros
Descobrindo
Serviço
Log
Centralizado
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
Log Centralizado
docker run -it
-e SERVICE_8080_NAME=app_devopsweek
-e SERVICE_TAGS=cluster01
--log-driver=gelf 
--log-opt gelf-address=udp://localhost:5005 
--log-opt tag="devops-week" 
-p 8080:8080 -e CONSUL=localhost:8500 devops-week
Construindo
Docker
Parâmetros
Descobrindo
Serviço
Log
Centralizado
Deploy
Remoto
Spot
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
Deploy Remoto - docker-machine
$ eval $(docker-machine env servidor)
$ docker pull registry/devops-week
$ docker run ...
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)
Deploy Remoto - pipeline
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
Estamos contratando!
Escritórios em São Paulo e Campinas
Slides e vagas disponíveis em:
http://geofusion.tech
OBRIGADO!
silvestree@gmail.com
Evandro Silvestre

More Related Content

What's hot

What's hot (20)

Meetup-Churrops
Meetup-ChurropsMeetup-Churrops
Meetup-Churrops
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
 
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
 
TDC2018SP | Trilha Containers - ASGARD: Abstraindo orquestradores de containers
TDC2018SP | Trilha Containers - ASGARD: Abstraindo orquestradores de containers TDC2018SP | Trilha Containers - ASGARD: Abstraindo orquestradores de containers
TDC2018SP | Trilha Containers - ASGARD: Abstraindo orquestradores de containers
 
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018Docker: introdução e primeiros passos - Baixada NERD - Junho-2018
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018
 
[CodeBEAM BR 2020] Construindo e Distribuindo CLIs com Elixir
[CodeBEAM BR 2020] Construindo e Distribuindo CLIs com Elixir[CodeBEAM BR 2020] Construindo e Distribuindo CLIs com Elixir
[CodeBEAM BR 2020] Construindo e Distribuindo CLIs com Elixir
 
TDC2016POA | Trilha .NET - Trazendo o poder dos containers ao mundo .NET
TDC2016POA | Trilha .NET -  Trazendo o poder dos containers ao mundo .NETTDC2016POA | Trilha .NET -  Trazendo o poder dos containers ao mundo .NET
TDC2016POA | Trilha .NET - Trazendo o poder dos containers ao mundo .NET
 
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
 
Docker + Kubernetes: orquestrando containers e escalando rapidamente aplicaçõ...
Docker + Kubernetes: orquestrando containers e escalando rapidamente aplicaçõ...Docker + Kubernetes: orquestrando containers e escalando rapidamente aplicaçõ...
Docker + Kubernetes: orquestrando containers e escalando rapidamente aplicaçõ...
 
TDC2016POA | Trilha .NET - O que esperar do C# 7
TDC2016POA | Trilha .NET - O que esperar do C# 7TDC2016POA | Trilha .NET - O que esperar do C# 7
TDC2016POA | Trilha .NET - O que esperar do C# 7
 
Docker e Kubernetes: Dicas e Truques - Dezembro-2019
Docker e Kubernetes: Dicas e Truques - Dezembro-2019Docker e Kubernetes: Dicas e Truques - Dezembro-2019
Docker e Kubernetes: Dicas e Truques - Dezembro-2019
 
Kubernetes New Contributors Workshop - Brasil 2022
Kubernetes New Contributors Workshop - Brasil 2022Kubernetes New Contributors Workshop - Brasil 2022
Kubernetes New Contributors Workshop - Brasil 2022
 
Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018
Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018
Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018
 
Meetup DevOps Carioca - GoCD + Docker + Docker Compose: uma história de amor
Meetup DevOps Carioca - GoCD + Docker + Docker Compose: uma história de amorMeetup DevOps Carioca - GoCD + Docker + Docker Compose: uma história de amor
Meetup DevOps Carioca - GoCD + Docker + Docker Compose: uma história de amor
 
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
 
Testadores 2015 - O Fantástico Mundo de Docker
Testadores 2015 - O Fantástico Mundo de DockerTestadores 2015 - O Fantástico Mundo de Docker
Testadores 2015 - O Fantástico Mundo de Docker
 
Alagoas Dev Day
Alagoas Dev DayAlagoas Dev Day
Alagoas Dev Day
 
Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018
 
Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018
Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018
Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018
 
Gitlab CI/CD com python
Gitlab CI/CD com pythonGitlab CI/CD com python
Gitlab CI/CD com python
 

Viewers also liked

Doença de parkinson
Doença de parkinsonDoença de parkinson
Doença de parkinson
migascouto
 
Doença de Parkinson
Doença de ParkinsonDoença de Parkinson
Doença de Parkinson
Laenca Unirg
 
Doença de parkison
Doença de parkisonDoença de parkison
Doença de parkison
hihdidushd
 

Viewers also liked (11)

TDC 2015 - As 10 leis de Parkinson aplicadas ao mundo ágil
TDC 2015 - As 10 leis de Parkinson aplicadas ao mundo ágilTDC 2015 - As 10 leis de Parkinson aplicadas ao mundo ágil
TDC 2015 - As 10 leis de Parkinson aplicadas ao mundo ágil
 
Doença de parkinson
Doença de parkinsonDoença de parkinson
Doença de parkinson
 
Parkinson
ParkinsonParkinson
Parkinson
 
Doença de parkinson
Doença de parkinsonDoença de parkinson
Doença de parkinson
 
Doença de parkinson
Doença de parkinsonDoença de parkinson
Doença de parkinson
 
Mal de Parkinson(fisiopatologia)
Mal de Parkinson(fisiopatologia)Mal de Parkinson(fisiopatologia)
Mal de Parkinson(fisiopatologia)
 
Doença de Parkinson
Doença de ParkinsonDoença de Parkinson
Doença de Parkinson
 
Doença de de parkinson
Doença de de parkinsonDoença de de parkinson
Doença de de parkinson
 
Doença de parkison
Doença de parkisonDoença de parkison
Doença de parkison
 
Parkinson
ParkinsonParkinson
Parkinson
 
Programando Testes: uma quebra de paradigmas entre DEV e QA
Programando Testes: uma quebra de paradigmas entre DEV e QAProgramando Testes: uma quebra de paradigmas entre DEV e QA
Programando Testes: uma quebra de paradigmas entre DEV e QA
 

Similar to Source-to-container no mundo real

Similar to Source-to-container no mundo real (20)

Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes
 
Docker - minicurso utfpr 2017
Docker -  minicurso utfpr 2017Docker -  minicurso utfpr 2017
Docker - minicurso utfpr 2017
 
Olá docker
Olá dockerOlá docker
Olá docker
 
JavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorldJavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorld
 
Docker
DockerDocker
Docker
 
Docker - Tutorial for beginners
Docker - Tutorial for beginnersDocker - Tutorial for beginners
Docker - Tutorial for beginners
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG Cabreúva
 
Transportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerTransportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com Docker
 
Orquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e ComposeOrquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e Compose
 
Docker e suas tecnologias
Docker e suas tecnologiasDocker e suas tecnologias
Docker e suas tecnologias
 
Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnog
 
Containers com docker #CPRecife4
Containers com docker #CPRecife4Containers com docker #CPRecife4
Containers com docker #CPRecife4
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
 
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
 
Deploying Docker Containers
Deploying Docker ContainersDeploying Docker Containers
Deploying Docker Containers
 
O poder dos microsserviços com Docker e Kubernetes
O poder dos microsserviços com Docker e KubernetesO poder dos microsserviços com Docker e Kubernetes
O poder dos microsserviços com Docker e Kubernetes
 
Docker: Uso no dia a dia de desenvolvimento
Docker: Uso no dia a dia de desenvolvimentoDocker: Uso no dia a dia de desenvolvimento
Docker: Uso no dia a dia de desenvolvimento
 
Dockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechDockerizando aplicações em uma Fintech
Dockerizando aplicações em uma Fintech
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
 
Primeiros passos com o Docker
Primeiros passos com o DockerPrimeiros passos com o Docker
Primeiros passos com o Docker
 

More from Evandro Silvestre

More from Evandro Silvestre (7)

Outcome-Driven Management
Outcome-Driven ManagementOutcome-Driven Management
Outcome-Driven Management
 
Leveraging exponential creation of Digital Products through a Digital Platform
Leveraging exponential creation of Digital Products through a Digital PlatformLeveraging exponential creation of Digital Products through a Digital Platform
Leveraging exponential creation of Digital Products through a Digital Platform
 
Eneagrama: Melhorando o soft skills uma pessoa por vez
Eneagrama: Melhorando o soft skills uma pessoa por vezEneagrama: Melhorando o soft skills uma pessoa por vez
Eneagrama: Melhorando o soft skills uma pessoa por vez
 
Por que saber o que você quer pode te deixar menos ágil
Por que saber o que você quer pode te deixar menos ágilPor que saber o que você quer pode te deixar menos ágil
Por que saber o que você quer pode te deixar menos ágil
 
Exploit e explore, um caminho para ambidextria organizacional
Exploit e explore, um caminho para ambidextria organizacionalExploit e explore, um caminho para ambidextria organizacional
Exploit e explore, um caminho para ambidextria organizacional
 
Os Axiomas da Criação de Produtos
Os Axiomas da Criação de ProdutosOs Axiomas da Criação de Produtos
Os Axiomas da Criação de Produtos
 
Big Data no mundo real. Transformando dados em conhecimento
Big Data no mundo real. Transformando dados em conhecimentoBig Data no mundo real. Transformando dados em conhecimento
Big Data no mundo real. Transformando dados em conhecimento
 

Source-to-container no mundo real