Usando Swarm como Orquestrador de Containers para o Rancher

Walisson de Deus Casonatto
Quick Mobile Labs
Published in
3 min readDec 28, 2016

Rancher é um ótimo Gerenciador de Container, mas sua orquestração padrão faz com que ele perca o seu valor. Entretanto, existe nele a opção de integrar com outros provedores de orquestração de containers, como o Docker Swarm.

O Docker Swarm provê uma orquestração de melhor qualidade e permite o uso de “networking overlay” (que seria uma única rede disponível em todos os hosts onde seus serviços podem acessar um ao outro pelo nome).

O primeiro passo para usar o Swarm como orquestrador de containers é instalar o Rancher:

docker pull rancher/server
sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server

Acesse o rancher por http://{ip-da-maquina}:8080 (não use localhost)

Após instalar o rancher será necessário criar um novo environment. Para isso, basta clicar em Manage Environments e então em Add Environment.

Vamos colocar o nome do Environment de Swarm e escolher o Swarm como orquestrador.

Após isso o Swarm vai pedir pelo menos um host.

Você pode adicionar um host clicando em Infrastructure > Add Host > Custom

Se você acessou com localhost deve trocar para o IP da máquina antes de salvar.

Copie o link que o Rancher gerou, com ele será possível adicionar um novo host.

Após esse passo, ao clicar em Swarm>Infrastructure haverá a lista de stacks padrão do rancher e será possível adicionar suas próprias stacks de serviços.

Vamos adicionar a stack do Refresh, um projeto bem simples em Go que toda vez que a página é recarregada é incrementado um valor no Redis. Usaremos o Swarm para subir os containers e sua network overlay para que eles comuniquem entre si sem a necessidade de um link ou de expor portas.

Clique em Add stack, dê um nome para a stack e insira o seguinte docker-compose e rancher-compose:

version: '2'
services:
api-refresh:
image: walissoncasonatto/go-refresh
environment:
REDIS_HOST: redis-refresh
stdin_open: true
tty: true
ports:
- 8282:80/tcp
labels:
io.rancher.container.pull_image: always
redis-refresh:
image: redis
stdin_open: true
tty: true
labels:
io.rancher.container.pull_image: always
version: '2'
services:
api:
scale: 1
start_on_create: true
redis:
scale: 1
start_on_create: true

Veja que no Redis nenhuma porta é publicada. A única porta publicada está na API. Há uma variável de ambiente passando o host do redis, que é o nome do serviço, é a partir deste nome o Rancher vai resolver para o container do Redis por isso ainda é necessário informar a porta. Ao desenvolver API’s dentro do container elas podem responder sempre na porta 80 evitando a preocupação com portas.

Após baixar as imagens do e subir os containers a aplicação estará disponível na porta 8282.

--

--