Docker 1.12 - Swarm Mode
-
Upload
rafael-gomes -
Category
Technology
-
view
1.356 -
download
0
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?
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?