$30 off During Our Annual Pro Sale. View Details »

Aplicações 12 fatores, melhor com Docker

Aplicações 12 fatores, melhor com Docker

Palestra sobre os 12 fatores e a aderência do Docker ministrada no TDC (The Developers Conference) em São Paulo em 8/7/2016.

Wellington F. Silva

July 08, 2016
Tweet

More Decks by Wellington F. Silva

Other Decks in Technology

Transcript

  1. Globalcode – Open4education
    Aplicações 12 fatores
    Melhor com Docker
    Wellington F. Silva

    View Slide

  2. Globalcode – Open4education
    Wellington F. Silva
    a.k.a.: wsilva/tom/boina
    técnico em telecom,
    programador, devops,
    instrutor, escritor, pai
    Atualmente na GFG

    View Slide

  3. Globalcode – Open4education
    Agenda
    O que é Docker?
    O que é 12 factor app?
    Os 12 fatores
    Como o Docker adere a cada fator

    View Slide

  4. Globalcode – Open4education
    O que é Docker?

    View Slide

  5. Globalcode – Open4education
    O que é Docker?

    View Slide

  6. Globalcode – Open4education
    O que é Docker?
    Sistema de contêineres Linux

    View Slide

  7. Globalcode – Open4education
    O que é Docker?
    Sistema de contêineres Linux
    Muito leve e rápido

    View Slide

  8. Globalcode – Open4education
    O que é Docker?
    Sistema de contêineres Linux
    Muito leve e rápido
    Muitas vantagens em 

    relação à virtualização

    tradicional

    View Slide

  9. Globalcode – Open4education
    O que é Docker?
    Sistema de contêineres Linux
    Muito leve e rápido
    Muitas vantagens em 

    relação à virtualização

    tradicional
    OSS

    View Slide

  10. Globalcode – Open4education
    O que é Docker?
    Sistema de contêineres Linux
    Muito leve e rápido
    Muitas vantagens em 

    relação à virtualização

    tradicional
    OSS
    Diversas ferramentas de 

    orquestração

    View Slide

  11. Globalcode – Open4education
    O que é Docker?
    Sistema de contêineres Linux
    Muito leve e rápido
    Muitas vantagens em 

    relação à virtualização

    tradicional
    OSS
    Diversas ferramentas de 

    orquestração
    Virtualização em nível de SO

    View Slide

  12. Globalcode – Open4education
    O que é Docker?

    View Slide

  13. Globalcode – Open4education
    Cupom de Desconto
    TDC25
    25% de desconto no site da
    Novatec*
    sem desculpas pra não
    aprender Docker
    *para qualquer título
    O que é Docker?

    View Slide

  14. Globalcode – Open4education
    O que é 12 factor app?

    View Slide

  15. Globalcode – Open4education
    O que é 12 factor app?
    Metodologia para desenvolvimento de 

    webapps e SAAS

    View Slide

  16. Globalcode – Open4education
    O que é 12 factor app?
    Metodologia para desenvolvimento de 

    webapps e SAAS
    Aplicável em qualquer linguagem de
    programação de alto nível

    View Slide

  17. Globalcode – Open4education
    O que é 12 factor app?
    Metodologia para desenvolvimento de 

    webapps e SAAS
    Aplicável em qualquer linguagem de
    programação de alto nível
    Facilita portabilidade e escalabilidade

    View Slide

  18. Globalcode – Open4education
    O que é 12 factor app?
    Metodologia para desenvolvimento de 

    webapps e SAAS
    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

    View Slide

  19. Globalcode – Open4education
    O que é 12 factor app?
    Metodologia para desenvolvimento de 

    webapps e SAAS
    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 portabilidade e escalabilidade

    View Slide

  20. Globalcode – Open4education
    O que é 12 factor app?
    Inspirado no "Patterns of Enterprise 

    Application Architecture" e no 

    "Refactoring" de Martin Fowler

    View Slide

  21. Globalcode – Open4education
    O que é 12 factor app?
    http://12factor.net

    View Slide

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

    View Slide

  23. Globalcode – Open4education
    I - Base de Código
    Tudo tem que estar no SCM (Source Control
    Management)

    View Slide

  24. Globalcode – Open4education
    I - Base de Código

    View Slide

  25. Globalcode – Open4education
    I - Base de Código
    Tudo tem que estar no SCM (Source Control
    Management)
    Repositório único por app (git, hg, svn, bazaar)

    View Slide

  26. Globalcode – Open4education
    I - Base de Código
    Tudo tem que estar no SCM (Source Control
    Management)
    Repositório único por app (git, hg, svn, bazaar)
    + de um codebase é um sistema distribuído

    View Slide

  27. Globalcode – Open4education
    I - Base de Código
    Tudo tem que estar no SCM (Source Control
    Management)
    Repositório único por app (git, hg, svn, bazaar)
    + de um codebase é um sistema distribuído
    Mais apps num mesmo codebase é errado

    View Slide

  28. Globalcode – Open4education
    I - Base de Código
    Tudo tem que estar no SCM (Source Control
    Management)
    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)

    View Slide

  29. Globalcode – Open4education
    I - Base de Código
    1 cd 12factor
    2 git init .
    3 git add web-container/Dockerfile
    4 git add web-app/*
    5 git commit -m "Iniciando os trabalhos"
    6 git remote add origin [email protected]:usuario/
    repo.git
    7 git push -u origin master

    View Slide

  30. Globalcode – Open4education
    I - Base de Código
    E o Docker?

    View Slide

  31. Globalcode – Open4education
    I - Base de Código
    E o Docker?
    Dockerfiles versionados

    View Slide

  32. Globalcode – Open4education
    I - Base de Código
    E o Docker?
    Dockerfiles versionados
    .dockerignore

    View Slide

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

    View Slide

  34. Globalcode – Open4education
    II - Dependências
    Devem ser declaradas explicitamente e isoladas

    View Slide

  35. Globalcode – Open4education
    II - Dependências
    1 2
    3 require_once "monolog/src/Monolog/Logger.php";

    View Slide

  36. Globalcode – Open4education
    II - Dependências
    1 2
    3 require_once "monolog/src/Monolog/Logger.php";
    1 composer require monolog/monolog
    2 composer install

    View Slide

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

    View Slide

  38. Globalcode – Open4education
    II - Dependências
    Devem ser declaradas explicitamente e isoladas
    Devem estar presentes em um arquivo manifesto
    (composer.json, requirements.txt, Gemfile)
    Utilizar ferramentas de automação (composer,
    pip, maven, bundle)

    View Slide

  39. Globalcode – Open4education
    II - Dependências
    Devem ser declaradas explicitamente e isoladas
    Devem estar presentes em um arquivo manifesto
    (composer.json, requirements.txt, Gemfile)
    Utilizar ferramentas de automação (composer,
    pip, maven, bundle)
    Dependências de recursos de SO devem ser
    vendorizadas em um novo app

    View Slide

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

    View Slide

  41. Globalcode – Open4education
    II - Dependências
    E o Docker?
    Dependências ficam explícitas no Dockerfile 

    (FROM, ADD, COPY)

    View Slide

  42. Globalcode – Open4education
    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

    View Slide

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

    View Slide

  44. Globalcode – Open4education
    III - Configurações
    Configurações devem ser armazenadas no
    ambiente

    View Slide

  45. Globalcode – Open4education
    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)

    View Slide

  46. Globalcode – Open4education
    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)

    View Slide

  47. Globalcode – Open4education
    III - Configurações

    View Slide

  48. Globalcode – Open4education
    III - Configurações
    E o Docker?
    Ao construir e ao iniciar contêineres devemos
    definir os valores das variáveis de ambiente

    View Slide

  49. Globalcode – Open4education
    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

    View Slide

  50. Globalcode – Open4education
    III - Configurações
    1 export ENABLE_ENV_FILE="12 factor”
    2 export DB_ROOT_PASS=“mutcha-porrada”
    3 export DB_USER="maguila”
    4 export DB_USER_PASS=“parabolicas-sta-rita”
    5 export APP_PASS="w0rdpr355”

    View Slide

  51. Globalcode – Open4education
    III - Configurações
    # arquivo docker-compose.yml
    1 version: '2'
    2 services:
    3 db:
    4 image: mysql:5.6
    5 volumes:
    6 - "./.data/db:/var/lib/mysql"
    7 restart: always
    8 environment:
    9 MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
    10 MYSQL_DATABASE: wordpress
    11 MYSQL_USER: ${DB_USER}
    12 MYSQL_PASSWORD: ${DB_USER_PASS}

    View Slide

  52. Globalcode – Open4education
    III - Configurações
    13 wordpress:
    14 depends_on:
    15 - db
    16 image: wordpress:latest
    17 links:
    18 - db
    19 ports:
    20 - "8000:80"
    21 restart: always
    22 environment:
    23 ENABLE_ENV_FILE: ${ENABLE_ENV_FILE}
    24 WORDPRESS_DB_HOST: db:3306
    25 WORDPRESS_DB_PASSWORD: ${APP_PASS}

    View Slide

  53. Globalcode – Open4education
    III - Configurações
    1 2
    3 /**
    4 * Initialize main environment vars and load Yii 2
    5 */
    6 public static function init()
    7 {
    8 require('/var/www/vendor/autoload.php');
    9
    10 // Load .env file if enabled and if it exists
    11 if (getenv('ENABLE_ENV_FILE') &&
    file_exists(self::APP_DIR.'.env')) {
    12 Dotenv::load(self::APP_DIR);
    13 }

    View Slide

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

    View Slide

  55. Globalcode – Open4education
    IV - Serviços de Apoio
    Trate serviços de apoio como recursos anexos.

    View Slide

  56. Globalcode – Open4education
    IV - Serviços de Apoio
    Trate serviços de apoio como recursos anexos.
    São serviços consumidos via rede

    View Slide

  57. Globalcode – Open4education
    IV - Serviços de Apoio
    Trate serviços de apoio como recursos anexos.
    São serviços consumidos via rede
    Exemplos: MySQL, Redis, Memcached, APIs,
    serviços de e-mail, Filas

    View Slide

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

    View Slide

  59. Globalcode – Open4education
    IV - Serviços de Apoio
    E o Docker?
    No arquivo docker-compose.yml temos as
    declarações dos serviços

    View Slide

  60. Globalcode – Open4education
    IV - Serviços de Apoio
    E o Docker?
    No arquivo docker-compose.yml temos as
    declarações dos serviços
    Os serviços de apoio também podem ser serviços
    externos (SAAS) ou outros contêineres

    View Slide

  61. Globalcode – Open4education
    IV - Serviços de Apoio
    1 version: '2'
    2 services:
    3 db:
    4 image: mysql:5.6
    5 volumes:
    6 - "./.data/db:/var/lib/mysql"
    7 restart: always
    8 environment:
    9 MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
    10 MYSQL_DATABASE: wordpress
    11

    View Slide

  62. Globalcode – Open4education
    IV - Serviços de Apoio
    12 wordpress:
    13 depends_on:
    14 - db
    15 image: wordpress:latest
    16 links:
    17 - db
    18 -
    "redis1.bpnp.cfg.sae1.cache.amazonaws.com:cache-live"
    19 ports:
    20 - "8000:80"
    21 restart: always
    22 environment:
    23 WORDPRESS_DB_HOST: db:3306
    24 WORDPRESS_DB_PASSWORD: ${APP_PASS}

    View Slide

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

    View Slide

  64. Globalcode – Open4education
    V - Contruir, lançar e executar
    Construção é a montagem do artefato e
    provisionamento de dependências

    View Slide

  65. Globalcode – Open4education
    V - Contruir, lançar e executar
    Construção é a montagem do artefato e
    provisionamento de dependências
    Na construção que temos que detectar problemas
    (testes automatizados)

    View Slide

  66. Globalcode – Open4education
    V - Contruir, lançar e executar
    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

    View Slide

  67. Globalcode – Open4education
    V - Contruir, lançar e executar
    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)

    View Slide

  68. Globalcode – Open4education
    V - Contruir, lançar e executar
    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

    View Slide

  69. Globalcode – Open4education
    V - Contruir, lançar e executar
    E o Docker?
    No Docker temos o slogan: "Build, ship and run
    any app anywhere"

    View Slide

  70. Globalcode – Open4education
    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

    View Slide

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

    View Slide

  72. Globalcode – Open4education
    VI - Processos
    Executar a aplicação com um ou mais processos

    View Slide

  73. Globalcode – Open4education
    VI - Processos
    Executar a aplicação com um ou mais processos
    A aplicação não deve guardar estado

    View Slide

  74. Globalcode – Open4education
    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

    View Slide

  75. Globalcode – Open4education
    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)

    View Slide

  76. Globalcode – Open4education
    VI - Processos
    E no Docker?
    Cada contêiner tem seu processo único

    View Slide

  77. Globalcode – Open4education
    VI - Processos
    E no Docker?
    Cada contêiner tem seu processo único
    Pode ser adicionado processos aos contêineres

    View Slide

  78. Globalcode – Open4education
    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"]

    View Slide

  79. Globalcode – Open4education
    VI - Processos
    8 php:
    9 image: php:7-fpm
    10 links:
    11 - “redis:redis.local"
    12 ports:
    13 - "9000:9000"
    14 entrypoint: ["php-fpm"]

    View Slide

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

    View Slide

  81. Globalcode – Open4education
    VII - Vínculo de portas
    Exportar os serviços através do vínculo de portas

    View Slide

  82. Globalcode – Open4education
    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

    View Slide

  83. Globalcode – Open4education
    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
    E no Docker?
    Cada container pode exportar uma porta e o
    vínculo é feito em uma porta do host

    View Slide

  84. Globalcode – Open4education
    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
    E no 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

    View Slide

  85. Globalcode – Open4education
    VII - Vínculo de portas
    1 # docker-compose.yml
    2 web:
    3 image: wfsilva/nginx-php7
    4 ports:
    5 - "80"
    6 - "443"
    7 - "172.16.0.10:8000:8000"

    View Slide

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

    View Slide

  87. Globalcode – Open4education
    VIII - Concorrência
    Escalar com base no processo usado como
    modelo

    View Slide

  88. Globalcode – Open4education
    VIII - Concorrência
    Escalar com base no processo usado como
    modelo
    Processos podem ser web ou workers

    View Slide

  89. Globalcode – Open4education
    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.

    View Slide

  90. Globalcode – Open4education
    VIII - Concorrência
    E no Docker?
    Podemos escalar a quantidade de contêineres
    que executam uma tarefa.

    View Slide

  91. Globalcode – Open4education
    VIII - Concorrência
    1 docker-compose scale web=34 worker=23
    2 docker-compose scale web=1 worker=1

    View Slide

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

    View Slide

  93. Globalcode – Open4education
    IX - Descartabilidade
    Maximizar robustez

    View Slide

  94. Globalcode – Open4education
    IX - Descartabilidade
    Maximizar robustez
    Inicialização rápida e desligamento normal e
    suave (gracefully shutdown)

    View Slide

  95. Globalcode – Open4education
    IX - Descartabilidade
    Maximizar robustez
    Inicialização rápida e desligamento normal e
    suave (gracefully shutdown)
    Processos do app são descartáveis

    View Slide

  96. Globalcode – Open4education
    IX - Descartabilidade
    Maximizar robustez
    Inicialização rápida e desligamento normal e
    suave (gracefully shutdown)
    Processos do app são descartáveis
    Facilita escalonamento rápido e elástico

    View Slide

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

    View Slide

  98. Globalcode – Open4education
    IX - Descartabilidade
    E no Docker?
    Trocar uma configuração de um contêiner, subir
    novos e desligar os antigos

    View Slide

  99. Globalcode – Open4education
    IX - Descartabilidade
    E no 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 nós.

    View Slide

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

    View Slide

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

    View Slide

  102. Globalcode – Open4education
    X - Paridade Dev/Prod
    Manter os ambientes mais similares
    (desenvolvimento, homologação, produção)

    View Slide

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

    View Slide

  104. Globalcode – Open4education
    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)

    View Slide

  105. Globalcode – Open4education
    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)

    View Slide

  106. Globalcode – Open4education
    X - Paridade Dev/Prod
    E no Docker?
    Os contêineres que rodam em dev tem as
    mesmas versões das instâncias em produção

    View Slide

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

    View Slide

  108. Globalcode – Open4education
    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"

    View Slide

  109. Globalcode – Open4education
    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"

    View Slide

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

    View Slide

  111. Globalcode – Open4education
    XI - Logs
    Logs como fluxo de eventos ordenados no tempo

    View Slide

  112. Globalcode – Open4education
    XI - Logs
    Logs como fluxo de eventos ordenados no tempo
    O app escreve os eventos no fluxo stdout

    View Slide

  113. Globalcode – Open4education
    XI - Logs
    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

    View Slide

  114. Globalcode – Open4education
    XI - Logs
    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

    View Slide

  115. Globalcode – Open4education
    XI - Logs
    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)

    View Slide

  116. Globalcode – Open4education
    XI - Logs
    E o Docker?
    Containers tem drivers de log

    View Slide

  117. Globalcode – Open4education
    XI - Logs
    E o Docker?
    Containers tem drivers de log
    Suporte a json-file, syslog, journald, gelf, fluentd,
    awslogs e splunk

    View Slide

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

    View Slide

  119. Globalcode – Open4education
    "Quando o relógio bate as doze,
    todas as caveiras fazem pose"
    Tumbalacatumba tumba tá, tumbalacatumba tumba tá

    View Slide

  120. Globalcode – Open4education
    XII - Processos Administrativos
    Tarefas administrativas são como processos
    pontuais

    View Slide

  121. Globalcode – Open4education
    XII - Processos Administrativos
    Tarefas administrativas são como processos
    pontuais
    Tem que rodar no mesmo codebase

    View Slide

  122. Globalcode – Open4education
    XII - Processos Administrativos
    Tarefas administrativas são como processos
    pontuais
    Tem que rodar no mesmo codebase
    Executar em ambiente idêntico

    View Slide

  123. Globalcode – Open4education
    XII - Processos Administrativos
    Tarefas administrativas são como processos
    pontuais
    Tem que rodar no mesmo codebase
    Executar em ambiente idêntico
    Migrações de banco

    View Slide

  124. Globalcode – Open4education
    XII - Processos Administrativos
    Tarefas administrativas são como processos
    pontuais
    Tem que rodar no mesmo codebase
    Executar em ambiente idêntico
    Migrações de banco
    Scripts de rotinas

    View Slide

  125. Globalcode – Open4education
    XII - Processos Administrativos
    Docker
    Técnica de conteinerização de comandos

    View Slide

  126. Globalcode – Open4education
    XII - Processos Administrativos
    Docker
    Técnica de conteinerização de comandos
    Adicionar processo ao contêiner com docker exec

    View Slide

  127. Globalcode – Open4education
    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

    View Slide

  128. Globalcode – Open4education
    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 \
    12 -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

    View Slide

  129. Globalcode – Open4education
    XII - Processos Administrativos
    1 # exemplo docker exec
    2 docker exec -it phpcontainer /usr/bin/top

    View Slide

  130. Globalcode – Open4education
    Concluindo
    Não são regras, são sugestões de boas práticas

    View Slide

  131. Globalcode – Open4education
    Concluindo
    Não são regras, são sugestões de boas práticas
    Os 12 fatores não farão sua aplicação melhor

    View Slide

  132. Globalcode – Open4education
    Concluindo
    Não são regras, são sugestões de boas práticas
    Os 12 fatores não farão sua aplicação melhor
    Os 12 fatores vão trazer a facilidade de trabalhar
    com sua aplicação em ambientes de cloud

    View Slide

  133. Globalcode – Open4education
    Concluindo
    Não são regras, são sugestões de boas práticas
    Os 12 fatores não farão sua aplicação melhor
    Os 12 fatores vão trazer a facilidade de trabalhar
    com sua aplicação em ambientes de cloud
    Docker tem uma grande aderência aos 12 fatores

    View Slide

  134. Globalcode – Open4education
    Slides & Feedback
    https://joind.in/talk/0a473
    https://speakerdeck.com/wsilva

    View Slide