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

Docker, ao infinito e além! (Criciúma Dev Confe...

Docker, ao infinito e além! (Criciúma Dev Conference 2019)

Palestra apresentada dia 4 de maio de 2019 (#MayTheFourth) no Criciúma Dev Conference (http://criciumadev.com.br/conference) em Criciúma-SC. Conceituamos o que é Docker, como que funciona, mostramos algumas das funcionalidades com demos. Conceituamos também orquestração de containers, os problemas que isso resolve, mostramos funcionalidades do Swarm também com algumas demos.

Wellington F. Silva

May 04, 2019
Tweet

More Decks by Wellington F. Silva

Other Decks in Technology

Transcript

  1. Wellington F. Silva contato: @_wsilva nicks: wsilva, boina, tom, fisi

    funções: pai, tec. telecom, programador, sysadmin, docker community leader, instrutor, escritor, zend certified engineer e docker certified associate
  2. Agenda • Docker 101 • Fluxo básico de trabalho com

    Docker • Problemas comuns em Produção • Orquestração • Revisitando conceitos • Docker Swarm (Swarm mode) • Demos
  3. Tipos de Virtualização • Full Virtualization • Partial Virtualization •

    Paravirtualization • OS Level Virtualization Docker
  4. U nix / C hroot BSD FreeBSD Jails / Solaris

    Zones O penVZ Parallels C groups Process C ontainers AIX / W pars LXC D ocker, rkt, cloud foundry, 
 C ontainerD 1982 2000 2005 2006 2007 2008 >= 2013 Evolução
  5. SERVIDOR SERVIDOR HOST OS HOST OS CONTAINER ENGINE HYPERVISOR BINS/LIBS

    GUEST OS APP GUEST OS BINS/LIBS BINS/LIBS APP APP APP VM VM Container Container
  6. Diferentes, não excludentes SERVIDOR XEN UBUNTU LINUX DOCKER ENGINE BINS/LIBS

    MYSQL DEBIAN LINUX BINS/LIBS NGINX BINS/LIBS PHP-FPM DOCKER ENGINE WINDOWS 2016 SERVER BINS/LIBS SQL SERVER
  7. Processos • Processo Linux com ID atribuído (PID) • Podem

    ser listados (com ps) dentro do contêiner ou fora (no host)
  8. Processos • Processo Linux com ID atribuído (PID) • Podem

    ser listados (com ps) dentro do contêiner ou fora, no host • Dentro do contêiner o PID=1, fora (no host) vai ter valor alto
  9. Kernel Namespaces • IPC - Interprocess communication • PID -

    Processos • NET- Rede • UTS - Unix timesharing system
  10. Kernel Namespaces • IPC - interprocess communication • PID -

    Processos • NET- rede • UTS - Unix timesharing system • USER - Usuários e grupos
  11. Kernel Namespaces • IPC - interprocess communication • PID -

    Processos • NET- rede • UTS - Unix timesharing system • USER - Usuários e grupos • MNT - Pontos de montagem
  12. CGroups • CPU • Memória • I/O em disco •

    Interface de rede • Hardwares periféricos 
 (pen drives, cameras, etc)
  13. Rootfs • Filesystem é uma hierarquia de diretórios • Rootfs

    é o filesystem base onde os demais sistemas de arquivos são montados
  14. Rootfs • Filesystem é uma hierarquia de diretórios • Rootfs

    é o filesystem base onde os demais sistemas de arquivos são montados • Em linhas gerais é o / (barra) de uma distribuição Linux
  15. Resumo • Processo 
 (é o que roda a aplicação)

    • CGroups e Namespaces 
 (como o processo vai rodar) • Rootfs 
 (onde o processo vai rodar)
  16. Fluxo básico de trabalho com Docker Client Docker Host docker

    run redis docker daemon Contêineres Imagens Registry
  17. Fluxo básico de trabalho com Docker Client Docker Host docker

    run redis docker daemon Contêineres Imagens Registry
  18. Fluxo básico de trabalho com Docker Client Docker Host docker

    run redis docker daemon Contêineres Imagens Registry
  19. Fluxo básico de trabalho com Docker Client Docker Host docker

    run redis docker daemon Contêineres Imagens Registry
  20. Fluxo básico de trabalho com Docker Client Docker Host docker

    run redis docker daemon Contêineres Imagens Registry
  21. LINUX (DOCKER HOST) WINDOWS OSX VM LINUX
 (DOCKER HOST) DOCKER

    CLIENT DOCKER CLIENT VM LINUX
 (DOCKER HOST) DOCKER CLIENT DOCKER DAEMON DOCKER DAEMON DOCKER DAEMON Contêineres Linux
  22. WINDOWS (DOCKER HOST) LINUX OSX VM WINDOWS (DOCKER HOST) DOCKER

    CLIENT DOCKER CLIENT DOCKER CLIENT DOCKER DAEMON DOCKER DAEMON DOCKER DAEMON VM WINDOWS (DOCKER HOST) Contêineres Windows
  23. Problemas comuns em Produção • Como gerenciar o ciclo de

    vida dos contêineres? • Como escalar?
  24. Problemas comuns em Produção • Como gerenciar o ciclo de

    vida dos contêineres? • Como escalar? • Como recriar contêineres que morrem?
  25. Problemas comuns em Produção • Como gerenciar o ciclo de

    vida dos contêineres? • Como escalar? • Como recriar contêineres que morrem? • Como atualizar o sistema sem downtime?
  26. Problemas comuns em Produção • Como gerenciar o ciclo de

    vida dos contêineres? • Como escalar? • Como recriar contêineres que morrem? • Como atualizar o sistema sem downtime? • Onde colocar meus contêineres?
  27. Problemas comuns em Produção • Como gerenciar o ciclo de

    vida dos contêineres? • Como escalar? • Como recriar contêineres que morrem? • Como atualizar o sistema sem downtime? • Onde colocar meus contêineres? • Como os contêineres vão se comunicar?
  28. Problemas comuns em Produção • Como gerenciar o ciclo de

    vida dos contêineres? • Como escalar? • Como recriar contêineres que morrem? • Como atualizar o sistema sem downtime? • Onde colocar meus contêineres? • Como os contêineres vão se comunicar? • Como gerenciar informações sensíveis?
  29. ORQUESTRAÇÃO Dicionário Oxford: 2. the planning or coordination of the

    elements of a situation to produce a desired effect especially surreptitiously
  30. ORQUESTRAÇÃO Dicionário Oxford: 2. the planning or coordination of the

    elements of a situation to produce a desired effect especially surreptitiously Tradução livre: O planejamento ou a coordenação dos elementos de uma situação para produzir um efeito desejado, especialmente evitando chamar atenção
  31. ORQUESTRAÇÃO Dicionário Oxford: 2. the planning or coordination of the

    elements of a situation to produce a desired effect especially surreptitiously Tradução livre: O planejamento ou a coordenação dos elementos de uma situação para produzir um efeito desejado, especialmente evitando chamar atenção
  32. Orquestração
 (efeitos desejados) • Aplicação rodando • Escalabilidade automática •

    Tolerante a falha (failover, health checks, etc) • Melhor utilização de recursos
  33. Orquestração
 (efeitos desejados) • Aplicação rodando • Escalabilidade automática •

    Tolerante a falha (failover, health checks, etc) • Melhor utilização de recursos • Minimizar intervenção manual
  34. Docker Swarm (contextualizando) • Criado e gerido pela Docker Inc

    • Lançado em dezembro de 2014, beta (v0.2) e dependente de service discovery e armazenamento de estado externo • Incorporado ao engine do Docker na versão 1.12 (28/07/2016) - pronto para produção - Swarm Mode • Melhorado na versões seguintes com secrets, stacks, configs, autolock
  35. Swarm mode (Componentes) Service web nginx
 (3 réplicas) Task: nginx.1

    node A task: nginx.2 node C task: nginx.3 node B Container 1 Container 2 Container 3 docker service create \ --replicas 3 nginx
  36. • Workers • instâncias que rodam contêineres e reportam os

    estados deles • Managers Swarm mode (Nodes)
  37. • Workers • instâncias que rodam contêineres e reportam os

    estados deles • Managers • decidem onde contêineres devem ser executados Swarm mode (Nodes)
  38. • Workers • instâncias que rodam contêineres e reportam os

    estados deles • Managers • decidem onde contêineres devem ser executados • mantém o desired state dos serviços Swarm mode (Nodes)
  39. • Workers • instâncias que rodam contêineres e reportam os

    estados deles • Managers • decidem onde contêineres devem ser executados • mantém o desired state dos serviços • gerenciam o cluster Swarm mode (Nodes)
  40. Swarm mode (Topologia) Worker Worker Worker Worker Worker raft consensus

    group Manager (líder) Manager Manager CA CA CA TLS TLS TLS TLS TLS TLS TLS TLS gossip network
  41. • Managers compartilham dados via raft/ concensus • Se o

    líder falhar outro manager assume Swarm mode (HA)
  42. • Managers compartilham dados via raft/ concensus • Se o

    líder falhar outro manager assume • Devemos manter o quorum (maioria de votos): (n/2+1), n é números de nós managers Swarm mode (HA)
  43. Swarm mode (Quorum) Qtde managers Quorum Qtde falhas 1 1

    0 2 2 0 3 2 1 4 3 1 5 3 2 6 4 2 7 4 3
  44. Swarm mode (Quorum) Qtde managers Quorum Qtde falhas 1 1

    0 2 2 0 3 2 1 4 3 1 5 3 2 6 4 2 7 4 3
  45. Swarm mode (scheduler) $ docker service create nginx Worker Manager

    API Orchestrator Allocator Dispatcher Scheduler Worker Executor
  46. Swarm mode (features) Scheduler focado em HA e com conhecimento

    de topologia $ docker node update \
 --label-add "az=sa-east-1" \
 demo $ docker service create \
 --placement-pref "spread=node.label.az" \
 demo
  47. Swarm mode (features) Encriptação TLS ponta a ponta entre todos

    os nós e com rotação automática de chaves $ docker swarm ca --help
  48. Swarm mode (features) Protege acesso indevido ao cluster com autolock

    $ docker swarm init --autolock
 $ docker swarm update --autolock
  49. Swarm mode (features) Gerencia de secrets, qualquer coisa de até

    500Kb que fica criptografada $ echo "senha" | docker secret \
 create senha-db - $ docker service create \
 --secret-add=senha-db demo $ docker service update \
 --secret-rm=senha-db demo
  50. Swarm mode (features) Dentro dos contêineres a secret, será montada

    em um tmpfs em /run/secret/secret-name # cat /run/secrets/senha-db
 senha
  51. Swarm mode (features) Gerencia de config, muito similar ao secret,

    porém não encriptado e não é montado no tmpfs $ echo "config" | docker config \
 create cfg-demo - $ docker service create \
 --config-add=cfg-demo demo $ docker service update \
 --config-rm=cfg-demo demo
  52. Swarm mode (features) Facilita healthcheck, não só o contêiner mas

    as app dentro do serviço pode ser monitorada $ docker service create \
 --health-cmd \
 --health-interval \
 --health-retries \
 --health-start-period \
 --health-timeout \
 --no-healthcheck
  53. Swarm mode (features) Controle de update de serviços $ docker

    service update \
 --update-parallelism \
 --update-order \
 --update-monitor \
 --update-delay \
 --update-max-failure-ratio \
 --update-failure-action
  54. Swarm mode (features) Controle de rollback de serviços se for

    usado 
 --update-failure-action=rollback então em caso de falhas o rollback é automático $ docker service update --rollback \
 --rollback-parallelism \
 --rollback-order \
 --rollback-monitor \
 --rollback-delay \
 --rollback-max-failure-ratio \
 --rollback-failure-action
  55. Grato 
 Quer mais? • Curso Docker e Kubernetes: 


    http://bit.ly/curso-docker-dca
 http://bit.ly/curso-k8s 
 • Telegram: 
 http://t.me/dockerbr • Slacks:
 http://bit.ly/docker-slack
 http://dockr.ly/community • Meetup em SP:
 http://events.docker.com/ sao-paulo