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
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
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
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)
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.”