Como instalar Docker e criar um cluster no Linux Debian ou Ubuntu

in #docker8 years ago

Docker e Docker Cluster (Swarm)

Primeiro temos de garantir que estamos com a versão kernel 3.10 ou superior.

Sem isso, nada feito. Não vou explicar aqui como se actualiza o kernel, mas se usar um Linux mais actual, não terá problemas.

Para ver qual a sua versão de Kernel, façam

root@node1:~# uname -r

Por vezes forçar um upgrade de todos os pacotes, resolve o problema. Mas não se esqueçam que um novo kernel (recém instalado) só fica activo após reboot.

Para actualizar os pacotes façam.

root@node1:~# aptitude update
root@node1:~# aptitude safe-upgrade

Passada toda esta fase de verificação de kernel, passemos à instalação do Docker.

Numa primeira fase se ainda não têm o binário curl têm de o instalar.

root@node1:~# aptitude install curl

Para instalar o Docker, existem muitas formas, mas para mim esta é a mais simples.

root@node1:~# curl -sSL http://get.docker.com | sh

Depois de muito output e se tudo correr bem

Executem o seguinte comando para verificar se está instalado e qual a versão.

root@node1:~# docker --version
Docker version 1.12.6, build 78d1802

Nos outros servidores de cluster (vamos chamar-lhes de nodes) seguir o mesmo procedimento feito até aqui, para instalar o docker.

Vamos agora ao cluster.

No node1 ou master node, corram o seguinte comando para iniciar o cluster

root@node1:~# docker swarm init --listen-addr [IP_LISTEN]

No IP_LISTEN coloquem o ip por onde querem que este docker comunique. No meu caso, o 64.137.197.68

Swarm initialized: current node (13lputgvbb1b3bm71rrkg4yww) is now a manager.
To add a worker to this swarm, run the following command:

docker swarm join
--token SWMTKN-1-3f12gtx7g17nhr158jp2dkil007ooi521evdiq47ulv4mcvm76b-2xcul6ip3ioamkcgapygfvdiu
64.137.197.68:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

E neste momento se corrermos o seguinte comando conseguimos ver que o nosso cluster já tem um nó (node) o Master/Leader, que é ele próprio o node1.

root@node1:~# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
13lputgvbb1b3sbm71rrkg4yww * node1 Ready Active Leader

No output anterior quando iniciámos o swarm, está descrito como adicionar um nó a este cluster. É muito simples, correm o comando:

Atenção: Onde está [IP] devem colocar o ip que têm como listen no vosso output.

root@node2:~# docker swarm join
--token SWMTKN-1-3f12gtx7g17nhr158jp2dkil007ooi521evdiq47ulv4mcvm76b-2xcul6ip3ioamkcgapygfvdiu
[IP]:2377

This node joined a swarm as a worker.

E assim podem fazer o mesmo em todos os outros nós.

Depois podem verificar como ficou o seu cluster correndo este comando no seu Master/Leader node… e apenas nesse node.

root@node1:~# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
13lputsgvbb1b3bm71rrkg4yww * node1 Ready Active Leader
7pt15nyw6f47xs5ytctrd33g6c node2 Ready Active
elfjsbkdst74tql8ahqeozeyfi node3 Ready Active

E pronto, neste momento temos o nosso cluster a correr sem problemas e de uma forma simples.

O próximo passo é colocar o nosso container (APP) a corre em todos os nós.

Vamos criar um container de nginx que apenas mostra a página welcome.

root@node1:~# docker service create --name nginx --publish 8000:80 nginx
72eczev99fm1tsb0sr1jvdevug

Reparem que em vez do habitual ‘docker run qualquer coisa’, que servia para correr um container individual, estamos a criar um service para esse container.

Fazemos isso para que a nossa APP (o nginx) tenha um ip que possa ser distribuido (escalado) para outros nós.

Podemos agora verificar quantos services temos actualmente:

root@node1:~# docker service ls
ID NAME REPLICAS IMAGE COMMAND
72eczev99fm1t nginx 1/1 nginx

Temos então um container a correr e só uma réplica do mesmo.

Se fizermos o seguinte comando vamos poder ver onde esse service está a correr.

root@node1:~# docker service ps 72eczev99fm1t
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
423mmhaoitygmqj42lppwdw3zv nginx.1 nginx node1 Running Running 6 minutes ago

Muito bom.

Mas vamos então agora ao mais interessante. Vamos escalar este serviço para 3 réplicas.

root@node1:~# docker service scale nginx=3
nginx scaled to 3

root@node1:~# docker service ls
ID NAME REPLICAS IMAGE COMMAND
72eczev99fm1t nginx 3/3 nginx

root@node1:~# docker service ps 7eczev99fm1t
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
43mmhaoitygmqj42lppwdw3zv nginx.1 nginx node1 Running Running 6 minutes ago
6kxvmnn49vpueg92ut7njo88y nginx.4 nginx node2 Running Running 3 seconds ago
dchf4iw9qnwkxyhlc31qirbmb nginx.2 nginx node3 Running Preparing 16 seconds ago

Olha só aí o serviço a correr nos três nós. Bonito, sim, muito…

Para verificar o vosso Welcome Page do nginx, abram o url http://ip_do_master:8000

E a página que estão a ver, pode ter sido servida por qualquer um dos nós. O Docker faz o balanceamento para o melhor nó.

Sensacional 🙂

Sort:  

Welcome to the platform, I wish everything work out for you. It’s not easy here but not difficult neither but just ask an extra effort, engagement is the key good luck I’m @goodaytraders Start by following people and they will do the same.

Obrigado pelas dicas, valeu!

Muito obrigado. Vou continuar a colocar mais, mas devo fazer em inglês