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

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

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. Docker

    Ao infinito e além!

    View Slide

  2. 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

    View Slide

  3. Agenda
    • Docker 101
    • Fluxo básico de trabalho com Docker
    • Problemas comuns em Produção
    • Orquestração
    • Revisitando conceitos
    • Docker Swarm (Swarm mode)
    • Demos

    View Slide

  4. O que é DOCKER?

    View Slide

  5. View Slide

  6. View Slide

  7. O que é DOCKER?

    View Slide

  8. “Ferramenta para
    virtualização no nível do
    Sistema Operacional.”

    View Slide

  9. –Wellington F. Silva
    “Ferramenta para
    virtualização no nível do
    Sistema Operacional.”

    View Slide

  10. Tipos de
    Virtualização

    View Slide

  11. Tipos de Virtualização
    • Full Virtualization

    View Slide

  12. Tipos de Virtualização
    • Full Virtualization
    • Partial Virtualization

    View Slide

  13. Tipos de Virtualização
    • Full Virtualization
    • Partial Virtualization
    • Paravirtualization

    View Slide

  14. Tipos de Virtualização
    • Full Virtualization
    • Partial Virtualization
    • Paravirtualization
    • OS Level Virtualization

    View Slide

  15. Tipos de Virtualização
    • Full Virtualization
    • Partial Virtualization
    • Paravirtualization
    • OS Level Virtualization
    Docker

    View Slide

  16. Evolução

    View Slide

  17. 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

    View Slide

  18. Docker NÃO é VM

    View Slide

  19. 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

    View Slide

  20. 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

    View Slide

  21. Como Funciona?
    * no Linux

    View Slide

  22. PROCESSOS
    +
    KERNEL NAMESPACES
    +
    CGROUPS
    +
    ROOTFS

    View Slide

  23. PROCESSOS

    View Slide

  24. PROCESSOS
    Aqueles que matamos com kill -9

    View Slide

  25. Processos
    • Processo Linux com ID atribuído (PID)

    View Slide

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

    View Slide

  27. 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

    View Slide

  28. KERNEL
    NAMESPACES

    View Slide

  29. KERNEL
    NAMESPACES
    Tudo aquilo que o processo pode "ver"

    View Slide

  30. Kernel Namespaces
    • IPC - Interprocess communication

    View Slide

  31. Kernel Namespaces
    • IPC - Interprocess communication
    • PID - Processos

    View Slide

  32. Kernel Namespaces
    • IPC - Interprocess communication
    • PID - Processos
    • NET- Rede

    View Slide

  33. Kernel Namespaces
    • IPC - Interprocess communication
    • PID - Processos
    • NET- Rede
    • UTS - Unix timesharing system

    View Slide

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

    View Slide

  35. Kernel Namespaces
    • IPC - interprocess communication
    • PID - Processos
    • NET- rede
    • UTS - Unix timesharing system
    • USER - Usuários e grupos
    • MNT - Pontos de montagem

    View Slide

  36. CGROUPS

    View Slide

  37. CGROUPS
    Tudo aquilo que o processo pode "usar"

    View Slide

  38. CGroups
    • CPU

    View Slide

  39. CGroups
    • CPU
    • Memória

    View Slide

  40. CGroups
    • CPU
    • Memória
    • I/O em disco

    View Slide

  41. CGroups
    • CPU
    • Memória
    • I/O em disco
    • Interface de rede

    View Slide

  42. CGroups
    • CPU
    • Memória
    • I/O em disco
    • Interface de rede
    • Hardwares periféricos 

    (pen drives, cameras, etc)

    View Slide

  43. ROOTFS
    Onde o processo vai rodar

    View Slide

  44. Rootfs
    • Filesystem é uma hierarquia de diretórios

    View Slide

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

    View Slide

  46. 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

    View Slide

  47. Resumo
    • Processo 

    (é o que roda a aplicação)
    • CGroups e Namespaces 

    (como o processo vai rodar)
    • Rootfs 

    (onde o processo vai rodar)

    View Slide

  48. Fluxo básico de
    trabalho com Docker?

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  55. Tipos de contêineres

    View Slide

  56. 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

    View Slide

  57. 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

    View Slide

  58. Demo?

    View Slide

  59. E na produção, com
    vários servidores?

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  63. 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?

    View Slide

  64. 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?

    View Slide

  65. 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?

    View Slide

  66. 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?

    View Slide

  67. ORQUESTRAÇÃO

    View Slide

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

    View Slide

  69. 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

    View Slide

  70. 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

    View Slide

  71. Orquestração

    (elementos)
    • Contêineres
    Maestro João Carlos Martins

    View Slide

  72. Orquestração

    (elementos)
    • Contêineres
    • Hosts
    Maestro João Carlos Martins

    View Slide

  73. Orquestração

    (elementos)
    • Contêineres
    • Hosts
    • Redes
    Maestro João Carlos Martins

    View Slide

  74. Orquestração

    (elementos)
    • Contêineres
    • Hosts
    • Redes
    • Volumes
    Maestro João Carlos Martins

    View Slide

  75. Orquestração

    (elementos)
    • Contêineres
    • Hosts
    • Redes
    • Volumes
    • Logs
    Maestro João Carlos Martins

    View Slide

  76. Orquestração

    (efeitos desejados)
    • Aplicação rodando

    View Slide

  77. Orquestração

    (efeitos desejados)
    • Aplicação rodando
    • Escalabilidade automática

    View Slide

  78. Orquestração

    (efeitos desejados)
    • Aplicação rodando
    • Escalabilidade automática
    • Tolerante a falha (failover, health checks, etc)

    View Slide

  79. Orquestração

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

    View Slide

  80. 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

    View Slide

  81. Revisitando
    Conceitos

    View Slide

  82. Revisitando Conceitos
    • Cluster

    View Slide

  83. Revisitando Conceitos
    • Cluster
    • Service Discovery

    View Slide

  84. Revisitando Conceitos
    • Cluster
    • Service Discovery
    • Load balance

    View Slide

  85. Revisitando Conceitos
    • Cluster
    • Service Discovery
    • Load balance
    • High Availability (HA)

    View Slide

  86. Revisitando Conceitos
    • Cluster
    • Service Discovery
    • Load balance
    • High Availability (HA)
    • Auto Scale

    View Slide

  87. Docker Swarm

    View Slide

  88. 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

    View Slide

  89. Swarm Mode

    View Slide

  90. • Nodes
    Swarm mode
    (Componentes)

    View Slide

  91. • Nodes
    • Stacks
    Swarm mode
    (Componentes)

    View Slide

  92. • Nodes
    • Stacks
    • Services
    Swarm mode
    (Componentes)

    View Slide

  93. • Nodes
    • Stacks
    • Services
    • Tasks
    Swarm mode
    (Componentes)

    View Slide

  94. 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

    View Slide

  95. • Workers
    Swarm mode
    (Nodes)

    View Slide

  96. • Workers
    • rodam contêineres e reportam os estados
    Swarm mode
    (Nodes)

    View Slide

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

    View Slide

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

    View Slide

  99. • 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)

    View Slide

  100. • 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)

    View Slide

  101. 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

    View Slide

  102. • Managers compartilham dados via raft/
    concensus
    Swarm mode
    (HA)

    View Slide

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

    View Slide

  104. • 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)

    View Slide

  105. 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

    View Slide

  106. 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

    View Slide

  107. Swarm mode
    (Consensus)
    https://raft.github.io/ 


    View Slide

  108. Swarm mode
    (scheduler)
    $ docker service create nginx
    Worker
    Manager
    API
    Orchestrator
    Allocator
    Dispatcher
    Scheduler
    Worker
    Executor

    View Slide

  109. 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

    View Slide

  110. 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

    View Slide

  111. Swarm mode
    (features)
    Protege acesso indevido ao cluster com autolock
    $ docker swarm init --autolock

    $ docker swarm update --autolock

    View Slide

  112. 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

    View Slide

  113. 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

    View Slide

  114. 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

    View Slide

  115. Swarm mode
    (features)
    Dentro dos contêineres a config, será montada
    no /
    # cat /cfg-demo

    config

    View Slide

  116. 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

    View Slide

  117. 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

    View Slide

  118. 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

    View Slide

  119. Swarm mode
    (features)
    Centraliza logs de serviços
    $ docker service logs --tail 10 \

    demo | sort -k3 -k4

    View Slide

  120. –Linus Torvalds
    “Talk is cheap. Show me
    the code.”

    View Slide

  121. 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

    View Slide