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
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
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
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
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
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
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
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
(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)
(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
Devem estar presentes em um arquivo manifesto (composer.json, requirements.txt, Gemfile) • Utilizar ferramentas de empacotamento (composer, pip, maven, bundle)
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
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
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)
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
• 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
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
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
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)
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
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)
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
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
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
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
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
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
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
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.
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
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
(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)
(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
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
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
• Executar em ambiente idêntico • Migrações de banco • Scripts de rotinas Docker • Técnica de conteinerização de comandos XII - Processos Administrativos
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