Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Docker para Maiores - Superlógica

Docker para Maiores - Superlógica

07080351150c53efa399856330e4fa19?s=128

Matheus Fidelis

June 17, 2018
Tweet

Transcript

  1. DOCKER PARA MAIORES Matheus Fidelis - @fidelissauro

  2. $WHOAMI Matheus Fidelis Desenvolvedor & DevOps Twitter: @fidelissauro Superlogica /

    PJBank Email: matheus@nanoshots.com.br Blog: http://nanoshots.com.br 2
  3. CRONOGRAMA DE BORDO 3 Docker via Cli Dockerfiles Docker Compose

  4. O QUE É DOCKER? 4

  5. O QUE É DOCKER? ▹ Docker é um empacotador de

    ambientes. ▹ Te permite criar ambientes complexos inteiros, suprir de dependências, padronizar máquinas e escalar de maneira rápida. ▹ Facilita a orquestração de máquinas e simular um ambiente distribuído. ▹ Queijo está para goiabada assim como Docker está para Cloud. 5
  6. O QUE É DOCKER? ▹ Não inventou a roda… ▹

    Gerencia Containers LXC ▹ Produto Open Source criado como uma Engine de Deploy por uma Startup chamada dotCloud. ▹ Todo mundo quis usar, e curtiu… 6
  7. CONTAINER X VM? 7

  8. ” “Nada se cria, tudo se copia, e sempre de

    um jeito novo” - Lars Herrmann 8
  9. POR QUE DOCKER? 9

  10. POR QUE DOCKER? ▹ Facilidade de Empacotar sistemas inteiros. ▹

    Facilidade de criação de Clusters e Servidores ▹ Resolução de dependências. ▹ Build performático ▹ MUITO rápido ▹ Escalável, elástico e “clusterizável” ▹ Feito para Cloud e API’s ▹ Não depende de hardware ou sistema ▹ Replicação quase trivial da produção para a máquina do Dev 10
  11. 11

  12. POR QUE DOCKER? 12 ▹ Independe de Linguagem ▹ Independe

    de Framework ▹ Independe de S.O. ▹ Conflitos de versão? Puff… ▹ Adapte para o que quiser ▹ O mundo é seu!
  13. QUALQUER NUVEM 13

  14. USE QUALQUER COISA 14

  15. ONDE QUEREMOS CHEGAR COM DOCKER? 15

  16. CI & CD CONTINUOUS INTEGRATION AND CONTINUOUS DELIVERY FAST SCALING

    INFRAESTRUTURA ÁGIL 16
  17. ALGUNS CASES NA SUPERLOGICA (Até o momento) 17

  18. Graylog ▹ Parsing de Logs do Cloud ▹ Trata uma

    média de 4 GB de Logs diários pra plataforma ▹ Usamos MongoDB, Elastic Search e Java. 18
  19. Hosting API ▹ API de Hospedagem do novo recurso de

    Sites Institucionais da Superlogica ▹ PHP 7 FPM, Bash Script, Apache, MySQL e Varnish 19
  20. Cloud Cache API ▹ API de Cacheamento de requisições do

    Cloud para os RDS da AWS. ▹ PHP 7, Memcache, Modularização Dev/Prod, Silex ▹ NGINX e Load Balance. ▹ Alta concorrência. 20
  21. 1 A estrada até aqui...

  22. DOCKER ON CLI (VULGO ORQUESTRAÇÃO V1D4 L0K4) 22

  23. UM É POUCO, DOIS É BOM E TRÊS É DEMAIS

    23
  24. SUBINDO UMA NA MÃO 24 matheus@fidelis~$ docker run -it ubuntu:latest

    /bin/bash root@123129380 apt-get update; apt-get install php7.0 apache2 (CTRL + D) matheus@fidelis~$ docker ps matheus@fidelis~$ docker commit 123129380 msfidelis/apache
  25. ORQUESTRAÇÃO BÁSICA (UMA PALAVRINHA SOBRE RECEITAS DE BOLO) 25

  26. DOCKERFILE (A RECEITA DO BOLO, VULGO CONTAINER) 26

  27. O QUE É UMA DOCKERFILE ▹ Dockerfiles são basicamente arquivos

    de configuração que vão modelar o Container Linux a sua necessidade. ▹ Uma Dockerfile segue um padrão de marcação que o Docker nativo vai seguir para executar o Build dos containers. 27
  28. ESTRUTURA DE UMA DOCKERFILE 28

  29. DOCKER BUILD 29 # docker build . -t seunome/nomedaimagem:versao #

    docker build . -t superlogica/aulaapache:latest # docker images
  30. BUILD DE UMA DOCKERFILE 30

  31. BUILD DE UMA DOCKERFILE 31

  32. OPÇÕES DA DOCKERFILE ▹ ADD - Adiciona qualquer arquivo (compactado)

    para dentro do container ▹ COPY - Copia qualquer arquivo para dentro do container ▹ RUN - Executa qualquer comando a uma camada e commita no container. ▹ CMD - Executa um comando quando o container é iniciado ▹ ENTRYPOINT - Permite rodar um comando na inicialização com Ciclo de vida. ▹ LABEL - Permite adicionar Metadados ao container. ▹ ENV - Cria variáveis de ambiente dentro do Container. ▹ EXPOSE - Informa quais portas o container irá ouvir. ▹ USER - Informa qual usuário irá executar as tarefas do container. Default: root. ▹ VOLUME - Faz a criação dos pontos de montagem do container. ▹ WORKDIR - Muda o diretório / para o diretório especificado. 32
  33. AINDA NÃO TA LEGAL… MUITO LONGE DO CI/CD 33 Ainda

    existe muito processo manual pra construir e subir containers. Não nos livramos da orquestração Vid4 L0k4.
  34. DIGA NÃO AO GO-HORSE (Piadinha infame) 34

  35. VOLTAMOS AO MAR DE DEPENDÊNCIAS E AO CLIENT VERBOSO. ▹

    No mundo real, nosso sistema depende de outras coisas… ▹ Quando você precisa subir suas dependências. ▹ Seu apache, que depende do seu PHP-FPM, que depende do seu MySQL e do seu Memcache, que mapeia volumes, que necessita de configurações específicas, ▹ e tudo isso, precisa ser startado em ordem pra funcionar 35
  36. VOLTAMOS AO MAR DE DEPENDÊNCIAS E AO CLIENT VERBOSO. docker

    run -t --name mysql mysql:5.7 -v ./data:/var/lib/mysql -p 3306:3306 docker run -t --name apache apache:latest -v ./code:/var/www/html -p 80:80 -v ./confs/apache2.conf:/etc/apache2/apache2.conf -v ./confs/vhost.conf:/etc/apache2/sites-enabled/vhost.conf docker run -t --name cache memcache:alpine -p 11211:11211 docker run -t --name php php7-fpm:lastest -v ./code:/var/www/html \ --link mysql --link apache --link memcache -p 9000:9000 36
  37. VOLTAMOS AO MAR DE DEPENDÊNCIAS E AO CLIENT VERBOSO. ▹

    MUITA coisa pra digitar ▹ Voltamos ao Dependency Hell, porém com containers, de fato não resolvemos o problema. ▹ Muita coisa pra digitar === muita chance de errar. ▹ NÃO, absolutamente você NÃO será inteligente de isolar isso num arquivo SH. (Espertinho, não seja V1D4 L0K4). 37
  38. ORQUESTRAÇÃO DE GENTE GRANDE (UMA SINFONIA ENTRE SISTEMAS) 38

  39. DOCKER COMPOSE 39 ▹ Veio do projeto FIG, que devido

    ao sucesso na comunidade foi adquirido e integrado ao Docker como Docker-Compose. ▹ Te permite baixar e buildar images, mapear volumes, propriedades, variáveis de ambiente de TODO o seu sistema a partir de um único arquivo ‘maestro’. ▹ Feito para aplicações multi-containers ▹ Você pode referenciar seus serviços, Dockerfiles, arquivos de configuração e como eles vão se comportar durante o build. ▹ Resolução de ordem de dependência ▹ Facilita escalar. Sério. ▹ Torna o chato, legal de novo :)
  40. 40 DOCKER-COMPOSE.YML

  41. COMANDOS DO DOCKER-COMPOSE... BUILD Builda o conteúdo do arquivo docker-compose.yml

    Para buildar sem cache, usamos --no-cache UP Sobe o conteúdo do arquivo docker-compose.yml STOP Para todos os containers filhos do docker-compose.yml do projeto SCALE Escala a aplicação selecionada scale api=3 RM & KILL Remove os containers parados do projeto. Use o -f para force. Mata todos os containers do projeto LOGS Mostra os logs do projeto atual. Toda a saída padrão de execução. 41
  42. DICAS SOBRE ORQUESTRAÇÃO 42 Vulgo coisas que eu gostaria que

    alguém tivesse me dito sobre o Docker...
  43. DICAS MAROTAS 43 ▹ Alpine Linux - Uma distribuição Linux

    Minimalista que serve pra trabalhos braçais e rápidos, como Cache, containers services que sobem, executam algo e morrem (ex: dump, restore, compose e etc). ▹ Modularização de ambiente Dev & Test e Prod via compose. Referenciamos um docker-compose alternativo com o -f Ex: docker-compose -f docker-compose-dev.yml ou -f docker-compose-prod.yml
  44. DICAS MAROTAS 44 ▹ Você pode containerizar serviços simples, como

    um Cron, um ‘npm install’, um ‘composer update’, um restore do banco de dados, um Webhook, uma chamada Curl e etc. ▹ Usar o HaProxy para construir um Load Balance entre containers. ▹ Ambientes Containerizados funcionam muito bem para comportar e escalar API’s REST. ▹ Sempre limpe seus containers após um yum ou apt (Ex: apt-get autoremove; apt-get clean; apt-get autoclean)
  45. DOCKER É 90% MINDSET E 10% TECNICA 45

  46. E NO PRÓXIMO CAPÍTULO... 46

  47. 47 E NO PRÓXIMO CAPÍTULO ▹ Introdução ao Google Kubernetes

    ▹ Instrodução ao Docker Swarm ▹ Construir e Escalar uma API REST ▹ Montar um ambiente completo de Teste, CI & CD, Build e Deploy com integrações do Docker como Jenkins e GIT
  48. 48 OBRIGADO! https://github.com/msfidelis/DockerParaMaioresSuperlogica/