Slide 1

Slide 1 text

Docker 
 Ao infinito e além!

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

O que é DOCKER?

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

O que é DOCKER?

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

Tipos de Virtualização

Slide 11

Slide 11 text

Tipos de Virtualização • Full Virtualization

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

Evolução

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Docker NÃO é VM

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

Como Funciona? * no Linux

Slide 22

Slide 22 text

PROCESSOS + KERNEL NAMESPACES + CGROUPS + ROOTFS

Slide 23

Slide 23 text

PROCESSOS

Slide 24

Slide 24 text

PROCESSOS Aqueles que matamos com kill -9

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

KERNEL NAMESPACES

Slide 29

Slide 29 text

KERNEL NAMESPACES Tudo aquilo que o processo pode "ver"

Slide 30

Slide 30 text

Kernel Namespaces • IPC - Interprocess communication

Slide 31

Slide 31 text

Kernel Namespaces • IPC - Interprocess communication • PID - Processos

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

CGROUPS

Slide 37

Slide 37 text

CGROUPS Tudo aquilo que o processo pode "usar"

Slide 38

Slide 38 text

CGroups • CPU

Slide 39

Slide 39 text

CGroups • CPU • Memória

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

CGroups • CPU • Memória • I/O em disco • Interface de rede • Hardwares periféricos 
 (pen drives, cameras, etc)

Slide 43

Slide 43 text

ROOTFS Onde o processo vai rodar

Slide 44

Slide 44 text

Rootfs • Filesystem é uma hierarquia de diretórios

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

Resumo • Processo 
 (é o que roda a aplicação) • CGroups e Namespaces 
 (como o processo vai rodar) • Rootfs 
 (onde o processo vai rodar)

Slide 48

Slide 48 text

Fluxo básico de trabalho com Docker?

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

Tipos de contêineres

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

Demo?

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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?

Slide 64

Slide 64 text

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?

Slide 65

Slide 65 text

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?

Slide 66

Slide 66 text

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?

Slide 67

Slide 67 text

ORQUESTRAÇÃO

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

Orquestração
 (efeitos desejados) • Aplicação rodando

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

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

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

Revisitando Conceitos

Slide 82

Slide 82 text

Revisitando Conceitos • Cluster

Slide 83

Slide 83 text

Revisitando Conceitos • Cluster • Service Discovery

Slide 84

Slide 84 text

Revisitando Conceitos • Cluster • Service Discovery • Load balance

Slide 85

Slide 85 text

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

Slide 86

Slide 86 text

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

Slide 87

Slide 87 text

Docker Swarm

Slide 88

Slide 88 text

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

Slide 89

Slide 89 text

Swarm Mode

Slide 90

Slide 90 text

• Nodes Swarm mode (Componentes)

Slide 91

Slide 91 text

• Nodes • Stacks Swarm mode (Componentes)

Slide 92

Slide 92 text

• Nodes • Stacks • Services Swarm mode (Componentes)

Slide 93

Slide 93 text

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

Slide 94

Slide 94 text

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

Slide 95

Slide 95 text

• Workers Swarm mode (Nodes)

Slide 96

Slide 96 text

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

Slide 97

Slide 97 text

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

Slide 98

Slide 98 text

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

Slide 99

Slide 99 text

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

Slide 100

Slide 100 text

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

Slide 101

Slide 101 text

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

Slide 102

Slide 102 text

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

Slide 103

Slide 103 text

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

Slide 104

Slide 104 text

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

Slide 105

Slide 105 text

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

Slide 106

Slide 106 text

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

Slide 107

Slide 107 text

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


Slide 108

Slide 108 text

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

Slide 109

Slide 109 text

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

Slide 110

Slide 110 text

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

Slide 111

Slide 111 text

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

Slide 112

Slide 112 text

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

Slide 113

Slide 113 text

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

Slide 114

Slide 114 text

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

Slide 115

Slide 115 text

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

Slide 116

Slide 116 text

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

Slide 117

Slide 117 text

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

Slide 118

Slide 118 text

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

Slide 119

Slide 119 text

Swarm mode (features) Centraliza logs de serviços $ docker service logs --tail 10 \
 demo | sort -k3 -k4

Slide 120

Slide 120 text

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

Slide 121

Slide 121 text

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