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
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
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
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
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
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
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
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
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
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
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
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
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)
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
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)
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
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
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)
● 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
● 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
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
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
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
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
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
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)
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
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)
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
● 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
● 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
● 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
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
● 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
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
● 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
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.
● Maximizar robustez ● Inicialização rápida e desligamento normal e suave (gracefull shutdown) ● Processos do app são descartáveis 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 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) IX - Descartabilidade
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
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
● Manter os ambientes mais similares (desenvolvimento, homologação, produção) ● Minimizar a lacuna de tempo (deploy em horas ou minutos) 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) X - Paridade Dev/Prod
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)
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
● 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
● 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
● 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
● Tarefas administrativas são como processos pontuais ● Mesmo codebase ● Executar em ambiente idêntico ● Migrações de banco XII - Processos Administrativos
● Tarefas administrativas são como processos pontuais ● Mesmo codebase ● Executar em ambiente idêntico ● Migrações de banco ● Scripts de rotinas 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 XII - Processos Administrativos
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