Docker 1.12 - Swarm Mode

Post on 15-Jan-2017

1.358 views 0 download

Transcript of Docker 1.12 - Swarm Mode

Docker 1.12 - Swarm

Rafael Gomes

Quem sou eu

Rafael Gomes:● Soteropolitano● Apaixonado por compartilhamento● Consultor na Thoughtworks● Docker Captain● Blog: techfree.com.br● Twitter/github: @gomex● Áreas de interesse/foco:

○ Cultura DevOps○ Cloud○ Entrega contínua○ Automação de infraestrutura○ Teste de infraestrutura○ Monitoramento

O que estou fazendo de relevante agora

Livro:

http://tinyurl.com/docker-devel

● Pague quanto quiser, inclusive nada

● Não precisa saber nada de Docker

● Licenciado com Creative Commons

Docker! Tá tranquilo?Vamos precisar de um conhecimento básico

O que há de novo?Bastante coisa! :)

Swarm mode

O que é o Swarm?

Como era criar um cluster Swarm

Instalar docker para manager Engine

Iniciar swarm manager container

Instalar consul

Instalar docker para manager Engine

Iniciar swarm worker container

Join do worker

Swarm modeComo é agora?

Swarm Mode

# docker swarm initEngine

Swarm Mode

# docker swarm join ipmanager

manager

worker

Docker service

# docker service create --replicas 3 --name web --network my_net nginx:latest manager

worker worker

my_net

Docker service

# docker service create --replicas 2 --name redis --network my_net redis:latest manager

worker worker

my_net

Falha de node

# docker service create --replicas 2 --name redis --network my_net redis:latest manager

worker worker

my_net

X

Falha de node

# docker service create --replicas 2 --name redis --network my_net redis:latest manager

worker

my_net

Healthcheck

HEALTHCHECK --interval=5m --timeout=3s \ CMD curl -f http://localhost/ || exit 1

Erros● 0 - Sucesso● 1 - Com problemas● 2 - Iniciando novamente

worker2

Manutenção de node

# docker node update --availability drain worker2 manager

worker1

my_net

worker2

Manutenção de node

# docker node update --availability drain worker2 manager

worker1

my_net

X

worker

Escalando

# docker service scale redis=3manager

worker

my_net

worker

Serviços globais

# docker service create --mode global --name datadog datadog/dd-agent manager

worker

my_net

worker

Escolhendo nodes

# docker service create --name mysql --constrain storage="ssd" mysql manager

worker

my_net

worker worker

docker daemon --label storage="ssd"

worker

Escolhendo nodes

manager

worker

my_net

worker worker

docker daemon --label storage="ssd"

# docker service scale mysql=3

Serviços

serviço

task

task

task

container

container

unikernel???

Serviços

redis

redis.1

redis.2

redis.3

redis:latest

redis:latest

redis:latest

Criando um serviço

redis

redis.1

redis.2

redis.3

redis:latest

redis:latest

redis:latest

# docker service create --name redis --replicas 3 redis:latest

Listando serviços

redis

redis.1

redis.2

redis.3

redis:latest

redis:latest

redis:latest

# docker service ls

Mais informações sobre serviço

redis

redis.1

redis.2

redis.3

redis:latest

redis:latest

redis:latest

# docker service inspect --pretty redis

Deletando serviço

redis

redis.1

redis.2

redis.3

redis:latest

redis:latest

redis:latest

# docker service rm redis

Atualizando a aplicação

redis

redis.1

redis.2

redis.3

redis:latest

redis:latest

redis:latest

# docker service create --replicas 3 --name redis --update-delay 10s --update-parallelism 1 redis:3.0.6

--update-delay : Tempo entre atualização de um container e outro--update-parallelism: Quanto containers serão atualizados ao mesmo tempo

Atualizando a aplicação

redis

redis.1

redis.2

redis.3

redis:latest

redis:latest

redis:latest

# docker service update --image redis:3.0.7 redis

--update-delay : Tempo entre atualização de um container e outro--update-parallelism: Quanto containers serão atualizados ao mesmo tempo

Stack

redis

redis.1

redis.2

redis.3

redis:latest

redis:latest

redis:latest

DAB (Distributed Application Bundle)

nginx redis datadog mysql

EXPERIMENTAL

Criando um cluster na sua máquina

# docker swarm init --listen-addr $(docker-machine ip manager):2377

# docker-machine create -d virtualbox manager

# docker $(docker-machine config worker) swarm join $(docker-machine ip manager)

# docker-machine create -d virtualbox worker1

# eval $(docker-machine env manager)

# docker node ls

Docker Beta AWS

O convite!

Iniciando o cluster

O que é criado com isso?

Acessando o gerenciamento

# ssh root@test-1-ELB-47393902.us.west-1.elb.amazonaws.com

# docker node ls

Iniciando serviços

# docker service create --name web -p 80:80/tcp nginx

# curl http://test-2-ELB-dd93902.us.west-1.elb.amazonaws.com

Aumentando o número de nodes

● Enviar dados para o

cloudwatch?

AWS Beta

Possibilidades futuras

● Integrações automatizada com outros serviços

● Autoscalling por padrão

AWS Beta

Observações:

● Ainda está em Beta (ou seja, não use em prod)

● A integração do Docker com AWS é sem custo, mas você ainda pode ser cobrado pelo uso dos recursos da AWS

Interessado em testar?

https://beta.docker.com

Dúvidas?

Rafael Gomes:

twitter.com/gomex

rgomes@thoughtworks.com

twitter.com/thoughtworks_pt

Obrigado!