Slide 1

Slide 1 text

Aplicações 12 fatores Melhor com Docker

Slide 2

Slide 2 text

wsilva/tom/boina ● Devops na GFG ● @_wsilva

Slide 3

Slide 3 text

Agenda ● O que é Docker? ● O que é 12 factor app? ● Os 12 fatores ● Como o Docker adere a cada fator

Slide 4

Slide 4 text

O que é Docker?

Slide 5

Slide 5 text

O que é Docker? ● Sistema de contêineres Linux

Slide 6

Slide 6 text

O que é Docker? ● Sistema de contêineres Linux ● Muito leve e rápido

Slide 7

Slide 7 text

O que é Docker? ● Sistema de contêineres Linux ● Muito leve e rápido ● Muitas vantagens em relação à virtualização

Slide 8

Slide 8 text

O que é Docker? ● Sistema de contêineres Linux ● Muito leve e rápido ● Muitas vantagens em relação à virtualização ● Build, Ship, Run anywhere

Slide 9

Slide 9 text

O que é Docker? ● Sistema de contêineres Linux ● Muito leve e rápido ● Muitas vantagens em relação à virtualização ● Build, Ship, Run anywhere ● Tem ferramentas para orquestração

Slide 10

Slide 10 text

O que é Docker? ● Sistema de contêineres Linux ● Muito leve e rápido ● Muitas vantagens em relação à virtualização ● Build, Ship, Run anywhere ● Tem ferramentas para orquestração ● Tem ferramentas para clusterização

Slide 11

Slide 11 text

O que é Docker? ● Sistema de contêineres Linux ● Muito leve e rápido ● Muitas vantagens em relação à virtualização ● Build, Ship, Run anywhere ● Tem ferramentas para orquestração ● Tem ferramentas para clusterização ● Criado por Solomon Hykes

Slide 12

Slide 12 text

O que é Docker? ● Sistema de contêineres Linux ● Muito leve e rápido ● Muitas vantagens em relação à virtualização ● Build, Ship, Run anywhere ● Tem ferramentas para orquestração ● Tem ferramentas para clusterização ● Criado por Solomon Hykes ● Open Source

Slide 13

Slide 13 text

O que é Docker? ● Sistema de contêineres Linux ● Muito leve e rápido ● Muitas vantagens em relação à virtualização ● Build, Ship, Run anywhere ● Tem ferramentas para orquestração ● Tem ferramentas para clusterização ● Criado por Solomon Hykes ● Open Source ● http://www.docker.com

Slide 14

Slide 14 text

O que é 12 factor app?

Slide 15

Slide 15 text

O que é 12 factor app? ● Metodologia para desenvolvimento de apps web e SAAS (Software as a Service)

Slide 16

Slide 16 text

O que é 12 factor app? ● Metodologia para desenvolvimento de apps web e SAAS (Software as a Service) ● Aplicável em qualquer linguagem de programação de alto nível

Slide 17

Slide 17 text

O que é 12 factor app? ● Metodologia para desenvolvimento de apps web e SAAS (Software as a Service) ● Aplicável em qualquer linguagem de programação de alto nível ● Facilita portabilidade e escalabilidade

Slide 18

Slide 18 text

O que é 12 factor app? ● Metodologia para desenvolvimento de apps web e SAAS (Software as a Service) ● Aplicável em qualquer linguagem de programação de alto nível ● Facilita portabilidade e escalabilidade ● Criado por Adam Wiggins e outros colaboradores do Heroku

Slide 19

Slide 19 text

O que é 12 factor app? ● Metodologia para desenvolvimento de apps web e SAAS (Software as a Service) ● Aplicável em qualquer linguagem de programação de alto nível ● Facilita portabilidade e escalabilidade ● Criado por Adam Wiggins e outros colaboradores do Heroku ● Foca em problemas sistêmicos comuns

Slide 20

Slide 20 text

O que é 12 factor app? ● Metodologia para desenvolvimento de apps web e SAAS (Software as a Service) ● Aplicável em qualquer linguagem de programação de alto nível ● Facilita portabilidade e escalabilidade ● Criado por Adam Wiggins e outros colaboradores do Heroku ● Foca em problemas sistêmicos comuns ● Inspirado no "Patterns of Enterprise Application Architecture" e no "Refactoring" de Martin Fowler

Slide 21

Slide 21 text

O que é 12 factor app? ● Metodologia para desenvolvimento de apps web e SAAS (Software as a Service) ● Aplicável em qualquer linguagem de programação de alto nível ● Facilita portabilidade e escalabilidade ● Criado por Adam Wiggins e outros colaboradores do Heroku ● Foca em problemas sistêmicos comuns ● Inspirado no "Patterns of Enterprise Application Architecture" e no "Refactoring" de Martin Fowler ● http://12factor.net

Slide 22

Slide 22 text

"Quando o relógio bate a uma, todas as caveiras saem das tumbas." Tumbalacatumba tumba tá, tumbalacatumba tumba tá

Slide 23

Slide 23 text

I - Base de Código ● Repositório único por app (git, hg, svn, bazaar)

Slide 24

Slide 24 text

I - Base de Código ● Repositório único por app (git, hg, svn, bazaar) ● + de um codebase é um sistema distribuído

Slide 25

Slide 25 text

I - Base de Código ● Repositório único por app (git, hg, svn, bazaar) ● + de um codebase é um sistema distribuído ● Mais apps num mesmo codebase é errado

Slide 26

Slide 26 text

I - Base de Código ● Repositório único por app (git, hg, svn, bazaar) ● + de um codebase é um sistema distribuído ● Mais apps num mesmo codebase é errado ● Vários deploys (dev1, dev2, dev3, staging, qa, integration, production)

Slide 27

Slide 27 text

I - Base de Código ● Repositório único por app (git, hg, svn, bazaar) ● + de um codebase é um sistema distribuído ● Mais apps num mesmo codebase é errado ● Vários deploys (dev1, dev2, dev3, staging, qa, integration, production) Docker: ● Colocar Dockerfiles no repositório

Slide 28

Slide 28 text

I - Base de Código 1 cd 12factor 2 git init . 3 git add web-container/Dockerfile 4 git add wer-source/* 5 git commit -m "Iniciando os trabalhos"

Slide 29

Slide 29 text

"Quando o relógio bate as duas, todas as caveiras pintam as unhas." Tumbalacatumba tumba tá, tumbalacatumba tumba tá

Slide 30

Slide 30 text

II - Dependências ● Devem ser declaradas e isoladas

Slide 31

Slide 31 text

II - Dependências ● Devem ser declaradas e isoladas ● Devem estar presentes em um arquivo manifesto (composer.json, requirements.txt, Gemfile)

Slide 32

Slide 32 text

II - Dependências ● Devem ser declaradas e isoladas ● Devem estar presentes em um arquivo manifesto (composer.json, requirements.txt, Gemfile) ● Utilizar ferramentas de empacotamento (composer, pip, maven, bundle)

Slide 33

Slide 33 text

II - Dependências ● Devem ser declaradas e isoladas ● Devem estar presentes em um arquivo manifesto (composer.json, requirements.txt, Gemfile) ● Utilizar ferramentas de empacotamento (composer, pip, maven, bundle) ● Dependencias de recursos de SO devem ser vendorizadas em um novo app

Slide 34

Slide 34 text

II - Dependências ● Devem ser declaradas e isoladas ● Devem estar presentes em um arquivo manifesto (composer.json, requirements.txt, Gemfile) ● Utilizar ferramentas de empacotamento (composer, pip, maven, bundle) ● Dependencias de recursos de SO devem ser vendorizadas em um novo app ● Mudanças são rapidamente detectadas na construção

Slide 35

Slide 35 text

II - Dependências ● Devem ser declaradas e isoladas ● Devem estar presentes em um arquivo manifesto (composer.json, requirements.txt, Gemfile) ● Utilizar ferramentas de empacotamento (composer, pip, maven, bundle) ● Dependencias de recursos de SO devem ser vendorizadas em um novo app ● Mudanças são rapidamente detectadas na construção Docker ● Dependências ficam explícitas no Dockerfile (FROM, ADD, COPY)

Slide 36

Slide 36 text

II - Dependências 1 FROM nginx:1.9.9 2 RUN apt-get update \ 3 && apt-get install -y -q --no-install-recommends \ 4 ca-certificates \ 5 wget \ 6 && apt-get clean \ 7 && rm -r /var/lib/apt/lists/* 8 RUN echo "daemon off;" >> /etc/nginx/nginx.conf \ 9 && sed -i 's/^http {/&\n server_names_hash_bucket_size 128; /g' /etc/nginx/nginx.conf

Slide 37

Slide 37 text

II - Dependências 1 ADD https://github.com/alanxz/rabbitmq-c/archive/v0.5.2.zip /rabbitmq-c-0.5.2.zip 2 RUN unzip rabbitmq-c-0.5.2.zip \ 3 && cd rabbitmq-c-0.5.2 \ 4 && autoreconf -i \ 5 && ./configure \ 6 && make \ 7 && make install \ 8 && pecl install amqp \

Slide 38

Slide 38 text

II - Dependências 9 && echo "extension=amqp.so" > /etc/php5/mods-available/amqp. ini \ 10 && cd / \ 11 && rm rabbitmq-c-0.5.2.zip \ 12 && rm -rf rabbitmq-c-0.5.2

Slide 39

Slide 39 text

"Quando o relógio bate as três, todas as caveiras imitam chinês." Tumbalacatumba tumba tá, tumbalacatumba tumba tá

Slide 40

Slide 40 text

● Configurações devem ser armazenadas no ambiente III - Configurações

Slide 41

Slide 41 text

● Configurações devem ser armazenadas no ambiente ● Configuração é tudo que varia conforme o deploy (dev, homolog, QA, instâncias em produção) III - Configurações

Slide 42

Slide 42 text

● Configurações devem ser armazenadas no ambiente ● Configuração é tudo que varia conforme o deploy (dev, homolog, QA, instâncias em produção) ● Informações de acesso a recursos (Servidores de Storage, Serviço de cache, Acesso a banco de dados) III - Configurações

Slide 43

Slide 43 text

III - Configurações ● Configurações devem ser armazenadas no ambiente ● Configuração é tudo que varia conforme o deploy (dev, homolog, QA, instâncias em produção) ● Informações de acesso a recursos (Servidores de Storage, Serviço de cache, Acesso a banco de dados) Docker ● Ao construir e ao iniciar um container podemos definir variáveis de ambiente

Slide 44

Slide 44 text

III - Configurações 1 export TESTING="12 factor"

Slide 45

Slide 45 text

III - Configurações 1 docker run -d --name web \ 2 --env TESTING="12 factor" nginx 3 docker run -d --name backend \ 4 --env-file ./env-file myimage/backend 5 docker run -d --name db \ 6 --env "MYSQL_ROOT_PASSWORD=senha" \ 7 --env "MYSQL_DATABASE=mydb" mysql

Slide 46

Slide 46 text

III - Configurações 1

Slide 47

Slide 47 text

"Quando o relógio bate as quatro, todas as caveiras tiram retrato." Tumbalacatumba tumba tá, tumbalacatumba tumba tá

Slide 48

Slide 48 text

IV - Serviços de Apoio ● Trate serviços de apoio como recursos anexados.

Slide 49

Slide 49 text

IV - Serviços de Apoio ● Trate serviços de apoio como recursos anexados. ● São serviços consumidos via rede

Slide 50

Slide 50 text

IV - Serviços de Apoio ● Trate serviços de apoio como recursos anexados. ● São serviços consumidos via rede ● Exemplos: MySQL, Redis, Memcache, APIs, serviços de e-mail, Filas

Slide 51

Slide 51 text

IV - Serviços de Apoio ● Trate serviços de apoio como recursos anexados. ● São serviços consumidos via rede ● Exemplos: MySQL, Redis, Memcache, APIs, serviços de e-mail, Filas ● Por ser anexado podemos trocar o recurso caso apresente problemas

Slide 52

Slide 52 text

IV - Serviços de Apoio ● Trate serviços de apoio como recursos anexados. ● São serviços consumidos via rede ● Exemplos: MySQL, Redis, Memcache, APIs, serviços de e-mail, Filas ● Por ser anexado podemos trocar o recurso caso apresente problemas Docker: ● Os serviços de apoio também podem ser outros containers

Slide 53

Slide 53 text

IV - Serviços de Apoio 1 # docker-compose.yml 2 web: 3 image: account/webimage 4 ports: 5 - "80:80" 6 links: 7 - "redis:redis.dev" 8 - "mysql-write:mysql02.service-provider.com" 9 - "mysql-read:192.168.1.77" 10 redis: 11 image: redis:2.8 12 hostname: redis.dev 13 ports:

Slide 54

Slide 54 text

IV - Serviços de Apoio 12 hostname: redis.dev 13 ports: 14 - "6379:6379" 15 entrypoint: ["redis-server"] 16 command: ["--appendonly", "yes"]

Slide 55

Slide 55 text

"Quando o relógio bate as cinco, todas as caveiras apertam os cintos." Tumbalacatumba tumba tá, tumbalacatumba tumba tá

Slide 56

Slide 56 text

V - Contruir, lançar e executar ● Separemos claramente os estágios de construção e execução

Slide 57

Slide 57 text

V - Contruir, lançar e executar ● Separemos claramente os estágios de construção e execução ● Construção é a montagem do artefato e provisionamento de dependências

Slide 58

Slide 58 text

V - Contruir, lançar e executar ● Separemos claramente os estágios de construção e execução ● Construção é a montagem do artefato e provisionamento de dependências ● Na construção que temos que detectar problemas (testes automatizados)

Slide 59

Slide 59 text

V - Contruir, lançar e executar ● Separemos claramente os estágios de construção e execução ● Construção é a montagem do artefato e provisionamento de dependências ● Na construção que temos que detectar problemas (testes automatizados) ● Lançamento é combinação do artefato com a configuração do ambiente de deploy

Slide 60

Slide 60 text

V - Contruir, lançar e executar ● Separemos claramente os estágios de construção e execução ● Construção é a montagem do artefato e provisionamento de dependências ● Na construção que temos que detectar problemas (testes automatizados) ● Lançamento é combinação do artefato com a configuração do ambiente de deploy ● Cada lançamento deve ter um identificador único (release)

Slide 61

Slide 61 text

V - Contruir, lançar e executar ● Separemos claramente os estágios de construção e execução ● Construção é a montagem do artefato e provisionamento de dependências ● Na construção que temos que detectar problemas (testes automatizados) ● Lançamento é combinação do artefato com a configuração do ambiente de deploy ● Cada lançamento deve ter um identificador único (release) ● Execução é a inicialização dos processos para fazer o app funcionar

Slide 62

Slide 62 text

V - Contruir, lançar e executar Docker ● No Docker temos o mote: build, ship and run anywhere

Slide 63

Slide 63 text

V - Contruir, lançar e executar 1 docker build \ 2 -f Dockerfile-production \ 3 -t username/image \ 4 ./container/ 5 docker push username/image 6 docker run -d username/images

Slide 64

Slide 64 text

"Quando o relógio bate as seis, todas as caveiras jogam xadrez." Tumbalacatumba tumba tá, tumbalacatumba tumba tá

Slide 65

Slide 65 text

● Executar a aplicação com um ou mais processos VI - Processos

Slide 66

Slide 66 text

● Executar a aplicação com um ou mais processos ● A aplicação não deve guardar estado VI - Processos

Slide 67

Slide 67 text

● Executar a aplicação com um ou mais processos ● A aplicação não deve guardar estado ● Dados devem ser persistidos e recuperados de serviços de apoio VI - Processos

Slide 68

Slide 68 text

● Executar a aplicação com um ou mais processos ● A aplicação não deve guardar estado ● Dados devem ser persistidos e recuperados de serviços de apoio ● Não devem ser daemon ou ter arquivo PID, deve trabalhar com o ambiente (upstart) VI - Processos

Slide 69

Slide 69 text

● Executar a aplicação com um ou mais processos ● A aplicação não deve guardar estado ● Dados devem ser persistidos e recuperados de serviços de apoio ● Não devem ser daemon ou ter arquivo PID, deve trabalhar com o ambiente (upstart) Docker ● Cada contêiner tem seu processo único VI - Processos

Slide 70

Slide 70 text

VI - Processos ● Executar a aplicação com um ou mais processos ● A aplicação não deve guardar estado ● Dados devem ser persistidos e recuperados de serviços de apoio ● Não devem ser daemon ou ter arquivo PID, deve trabalhar com o ambiente (upstart) Docker ● Cada contêiner tem seu processo único ● Pode ser adicionado processos aos contêineres

Slide 71

Slide 71 text

VI - Processos 1 # docker-compose.yml 2 redis: 3 image: redis:2.8 4 ports: 5 - "6379:6379" 6 entrypoint: ["redis-server"] 7 command: ["--appendonly", "yes"]

Slide 72

Slide 72 text

"Quando o relógio bate as sete, todas as caveiras jogam basquete." Tumbalacatumba tumba tá, tumbalacatumba tumba tá

Slide 73

Slide 73 text

● Exportar os serviços através do vínculo de portas VII - Vínculo de portas

Slide 74

Slide 74 text

● Exportar os serviços através do vínculo de portas ● Cada app deve escutar e receber as requisições em sua porta VII - Vínculo de portas

Slide 75

Slide 75 text

● Exportar os serviços através do vínculo de portas ● Cada app deve escutar e receber as requisições em sua porta Docker ● Cada container pode exportar uma porta e o vínculo é feito em uma porta do host VII - Vínculo de portas

Slide 76

Slide 76 text

VII - Vínculo de portas ● Exportar os serviços através do vínculo de portas ● Cada app deve escutar e receber as requisições em sua porta Docker ● Cada container pode exportar uma porta e o vínculo é feito em uma porta do host ● Podemos escolher qual porta do host será vinculada ao container

Slide 77

Slide 77 text

VII - Vínculo de portas 1 # docker-compose.yml 2 web: 3 image: username/webimage 4 ports: 5 - "80" 6 - "443" 7 - "8000:8000"

Slide 78

Slide 78 text

"Quando o relógio bate as oito, todas as caveiras comem biscoito." Tumbalacatumba tumba tá, tumbalacatumba tumba tá

Slide 79

Slide 79 text

● Escalar com base no processo usado como modelo VIII - Concorrência

Slide 80

Slide 80 text

● Escalar com base no processo usado como modelo ● Processos podem ser web ou workers VIII - Concorrência

Slide 81

Slide 81 text

● Escalar com base no processo usado como modelo ● Processos podem ser web ou workers ● Mais processos em paralelo, mais requisições são respondidas ou mais rápido terminam processamentos em lote. VIII - Concorrência

Slide 82

Slide 82 text

VIII - Concorrência ● Escalar com base no processo usado como modelo ● Processos podem ser web ou workers ● Mais processos em paralelo, mais requisições são respondidas ou mais rápido terminam processamentos em lote. Docker ● Podemos escalar a quantidade de contêineres que executam uma tarefa.

Slide 83

Slide 83 text

VIII - Concorrência 1 docker-compose scale web=5 worker=3 2 docker-compose scale web=1 worker=1

Slide 84

Slide 84 text

"Quando o relógio bate as nove, todas as caveiras se sacodem." Tumbalacatumba tumba tá, tumbalacatumba tumba tá

Slide 85

Slide 85 text

● Maximizar robustez IX - Descartabilidade

Slide 86

Slide 86 text

● Maximizar robustez ● Inicialização rápida e desligamento normal e suave (gracefull shutdown) IX - Descartabilidade

Slide 87

Slide 87 text

● Maximizar robustez ● Inicialização rápida e desligamento normal e suave (gracefull shutdown) ● Processos do app são descartáveis IX - Descartabilidade

Slide 88

Slide 88 text

● Maximizar robustez ● Inicialização rápida e desligamento normal e suave (gracefull shutdown) ● Processos do app são descartáveis ● Facilita escalonamento rápido e elástico IX - Descartabilidade

Slide 89

Slide 89 text

● Maximizar robustez ● Inicialização rápida e desligamento normal e suave (gracefull shutdown) ● Processos do app são descartáveis ● Facilita escalonamento rápido e elástico ● Evitar desligamento repentino (crash) IX - Descartabilidade

Slide 90

Slide 90 text

IX - Descartabilidade ● Maximizar robustez ● Inicialização rápida e desligamento normal e suave (gracefull shutdown) ● Processos do app são descartáveis ● Facilita escalonamento rápido e elástico ● Evitar desligamento repentino (crash) Docker: ● Trocar uma configuração de um contêiner, subir novos e desligar os antigos

Slide 91

Slide 91 text

IX - Descartabilidade ● Maximizar robustez ● Inicialização rápida e desligamento normal e suave (gracefull shutdown) ● Processos do app são descartáveis ● Facilita escalonamento rápido e elástico ● Evitar desligamento repentino (crash) Docker: ● Trocar uma configuração de um contêiner, subir novos e desligar os antigos ● Em um Swarm quando um nó cai os containers são reorganizados nos demais

Slide 92

Slide 92 text

IX - Descartabilidade 1 docker run -d -P \ 2 --memory=512M \ 3 --name webserver \ 4 nginx 5 docker update --memory=1G webserver

Slide 93

Slide 93 text

"Quando o relógio bate as dez, todas as caveiras comem pastéis." Tumbalacatumba tumba tá, tumbalacatumba tumba tá

Slide 94

Slide 94 text

● Manter os ambientes mais similares (desenvolvimento, homologação, produção) X - Paridade Dev/Prod

Slide 95

Slide 95 text

● Manter os ambientes mais similares (desenvolvimento, homologação, produção) ● Minimizar a lacuna de tempo (deploy em horas ou minutos) X - Paridade Dev/Prod

Slide 96

Slide 96 text

● Manter os ambientes mais similares (desenvolvimento, homologação, produção) ● Minimizar a lacuna de tempo (deploy em horas ou minutos) ● Minimizar a lacuna de pessoal (devs codam, ops fazem deploy) X - Paridade Dev/Prod

Slide 97

Slide 97 text

X - Paridade Dev/Prod ● Manter os ambientes mais similares (desenvolvimento, homologação, produção) ● Minimizar a lacuna de tempo (deploy em horas ou minutos) ● Minimizar a lacuna de pessoal (devs codam, ops fazem deploy) ● Minimizar a lacuna de ferramentas (Dev com OSX, Nginx 1.2.1, PHP 7.0.3 e MySQL 5.6 - Prod com Nginx 1.9, PHP 5.5.33 e Percona 5.6)

Slide 98

Slide 98 text

X - Paridade Dev/Prod ● Manter os ambientes mais similares (desenvolvimento, homologação, produção) ● Minimizar a lacuna de tempo (deploy em horas ou minutos) ● Minimizar a lacuna de pessoal (devs codam, ops fazem deploy) ● Minimizar a lacuna de ferramentas (Dev com OSX, Nginx 1.2.1, PHP 7.0.3 e MySQL 5.6 - Prod com Nginx 1.9, PHP 5.5.33 e Percona 5.6) Docker: ● Os contêineres que rodam em dev tem as mesmas versões das instâncias em produção

Slide 99

Slide 99 text

1 percona: 2 image: percona:5.6 3 ports: 4 - "3306:3306" 5 environment: 6 - "MYSQL_ROOT_PASSWORD=senha" 7 - "MYSQL_DATABASE=db" X - Paridade Dev/Prod

Slide 100

Slide 100 text

X - Paridade Dev/Prod 8 rabbit: 9 image: rabbitmq:3-management 10 ports: 11 - "5672:5672" 12 - "15672:15672" 13 environment: 14 - "TERM=linux" 15 - "RABBITMQ_NODENAME=rabbit" 16 - "RABBITMQ_DEFAULT_PASS=senha" 17 - "RABBITMQ_DEFAULT_USER=admin"

Slide 101

Slide 101 text

X - Paridade Dev/Prod 18 redis: 19 image: redis:2.8 20 ports: 21 - "6379:6379" 22 entrypoint: ["redis-server"] 23 command: ["--appendonly", "yes"] 24 memcached: 25 image: memcached:1.4 26 ports: 27 - "11211:11211"

Slide 102

Slide 102 text

"Quando o relógio bate as onze, todas as caveiras sobem no bonde." Tumbalacatumba tumba tá, tumbalacatumba tumba tá

Slide 103

Slide 103 text

● Logs como fluxo de eventos ordenados no tempo XI - Logs

Slide 104

Slide 104 text

● Logs como fluxo de eventos ordenados no tempo ● O app escreve os eventos no fluxo stdout XI - Logs

Slide 105

Slide 105 text

● Logs como fluxo de eventos ordenados no tempo ● O app escreve os eventos no fluxo stdout ● Em dev os logs são consultados acessando os arquivos XI - Logs

Slide 106

Slide 106 text

● Logs como fluxo de eventos ordenados no tempo ● O app escreve os eventos no fluxo stdout ● Em dev os logs são consultados acessando os arquivos ● Em homolog e produção são capturados em roteadores tipo fluent, logplex, logstash XI - Logs

Slide 107

Slide 107 text

● Logs como fluxo de eventos ordenados no tempo ● O app escreve os eventos no fluxo stdout ● Em dev os logs são consultados acessando os arquivos ● Em homolog e produção são capturados em roteadores tipo fluent, logplex, logstash ● Busca e apresentação de logs com ferramentas tipo ELK (Elastic Search, Logstash e Kibana) XI - Logs

Slide 108

Slide 108 text

XI - Logs Docker ● Containers tem drivers de log

Slide 109

Slide 109 text

XI - Logs Docker ● Containers tem drivers de log ● Suporte a json-file, syslog, journald, gelf, fluentd, awslogs e splunk

Slide 110

Slide 110 text

XI - Logs 1 docker run \ 2 --log-driver=fluentd \ 3 --log-opt fluentd-address=localhost:24224 \ 4 --log-opt tag=docker.{{.Name}}

Slide 111

Slide 111 text

"Quando o relógio bate as doze, todas as caveiras fazem pose" Tumbalacatumba tumba tá, tumbalacatumba tumba tá

Slide 112

Slide 112 text

● Tarefas administrativas são como processos pontuais XII - Processos Administrativos

Slide 113

Slide 113 text

● Tarefas administrativas são como processos pontuais ● Mesmo codebase XII - Processos Administrativos

Slide 114

Slide 114 text

● Tarefas administrativas são como processos pontuais ● Mesmo codebase ● Executar em ambiente idêntico XII - Processos Administrativos

Slide 115

Slide 115 text

● Tarefas administrativas são como processos pontuais ● Mesmo codebase ● Executar em ambiente idêntico ● Migrações de banco XII - Processos Administrativos

Slide 116

Slide 116 text

● Tarefas administrativas são como processos pontuais ● Mesmo codebase ● Executar em ambiente idêntico ● Migrações de banco ● Scripts de rotinas XII - Processos Administrativos

Slide 117

Slide 117 text

● Tarefas administrativas são como processos pontuais ● Mesmo codebase ● Executar em ambiente idêntico ● Migrações de banco ● Scripts de rotinas Docker ● Técnica de conteinerização de comandos XII - Processos Administrativos

Slide 118

Slide 118 text

XII - Processos Administrativos ● Tarefas administrativas são como processos pontuais ● Mesmo codebase ● Executar em ambiente idêntico ● Migrações de banco ● Scripts de rotinas Docker ● Técnica de conteinerização de comandos ● Adicionar processo ao contêiner com docker exec

Slide 119

Slide 119 text

XII - Processos Administrativos 1 # subindo o server 2 docker run --name db -d -P \ 3 --env "MYSQL_ROOT_PASSWORD=senha" \ 4 --env "MYSQL_DATABASE=banco" \ 5 percona

Slide 120

Slide 120 text

XII - Processos Administrativos 6 # rodando o client 7 docker run -it \ 8 --link db:db \ 9 --rm percona \ 10 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" - 11 P"$MYSQL_PORT_3306_TCP_PORT" -uroot - p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

Slide 121

Slide 121 text

Q&A

Slide 122

Slide 122 text

https://joind.in/talk/91f92 https://speakerdeck.com/wsilva Slides & Feedback