Globalcode – Open4education Wellington F. Silva a.k.a.: wsilva/tom/boina técnico em telecom, programador, devops, instrutor, escritor, pai Atualmente na GFG
Globalcode – Open4education O que é Docker? Sistema de contêineres Linux Muito leve e rápido Muitas vantagens em relação à virtualização tradicional OSS
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
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
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?
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
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
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
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
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
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
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)
Globalcode – Open4education II - Dependências Devem ser declaradas explicitamente e isoladas Devem estar presentes em um arquivo manifesto (composer.json, requirements.txt, Gemfile)
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)
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
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
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)
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)
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 }
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
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
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
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)
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
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)
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
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
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)
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
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
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
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.
Globalcode – Open4education IX - Descartabilidade Maximizar robustez Inicialização rápida e desligamento normal e suave (gracefully shutdown) Processos do app são descartáveis
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
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)
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.
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)
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)
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)
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
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
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)
Globalcode – Open4education XII - Processos Administrativos Tarefas administrativas são como processos pontuais Tem que rodar no mesmo codebase Executar em ambiente idêntico
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
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
Globalcode – Open4education XII - Processos Administrativos Docker Técnica de conteinerização de comandos Adicionar processo ao contêiner com docker exec
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
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