As melhores ofertas do ano. 30 dias para pedir reembolso. Ofertas por tempo limitado. Suporte sempre online. Não perca!

Como criar um Docker Swarm

Como criar um Docker Swarm

O Docker Swarm é uma ferramenta de orquestração de contêineres que permite gerenciar várias instâncias do Docker Engine como um único sistema. Com ele, é possível implantar e gerenciar aplicações em contêineres distribuídos entre diferentes máquinas. Dessa forma, a aplicação continua funcionando mesmo que uma delas apresente falhas ou fique offline.

Neste artigo, você vai aprender a configurar um Docker Swarm e implantar serviços em várias instâncias de servidor virtual privado (VPS). Ao final, saberá como criar e gerenciar um cluster escalável e de alta disponibilidade usando o Docker Swarm.

Pré-requisitos

Antes de criar um Docker Swarm, configure pelo menos duas máquinas: uma para atuar como nó gerenciador e outra como nó de trabalho. Você pode usar computadores pessoais, máquinas virtuais, instâncias VPS ou outros ambientes compatíveis.

Neste tutorial, vamos usar três instâncias de VPS do serviço de hospedagem Docker da Hostinger: uma como nó gerenciador e as outras duas como nós de trabalho.

O Docker precisa de pelo menos 4 GB de RAM para funcionar sem problemas. Por isso, nosso plano KVM 1, disponível a partir de R$ 29,99/mês, deve ser suficiente. Ele oferece um núcleo de CPU, 4 GB de RAM e 50 GB de armazenamento NVMe.

Se precisar de mais poder de processamento ou espaço de armazenamento, você pode mudar para um plano superior a qualquer momento. Outra vantagem da hospedagem Docker da Hostinger é que o Docker e todos os seus componentes essenciais já vêm pré-instalados, dispensando a configuração manual.

Depois de contratar as instâncias VPS, recomendamos alterar o nome de host de cada uma de acordo com sua função no swarm. Essa etapa é opcional, mas facilita a leitura das informações e a identificação de cada nó.

Para alterar o nome de host do VPS na Hostinger, acesse Painel da Hostinger → VPS → Gerenciar → Visão geral → Detalhes do VPS. Em seguida, clique no ícone de lápis ao lado do nome de host atual e renomeie as instâncias da seguinte forma:

  • Nó gerenciador: manager.vps
  • Nó de trabalho 1: worker1.vps
  • Nó de trabalho 2: worker2.vps
Informações do nome de host na página Visão geral do VPS no hPanel

Se você já configurou o Uncomplicated Firewall (UFW) no VPS, libere as seguintes portas para permitir a comunicação entre os nós do swarm:

  • 2377 TCP: para gerenciamento do cluster e comunicação entre os nós.
  • 7946 TCP/UDP: para comunicação entre os nós do swarm.
  • 4789 UDP: para o tráfego da rede overlay entre contêineres em nós diferentes.

Se ainda não configurou o UFW ou acabou de contratar o VPS, pule esta etapa.

Para liberar as portas necessárias, abra o terminal de cada instância e execute os comandos:

sudo ufw allow 2377/tcp
sudo ufw allow 7946/tcp
sudo ufw allow 7946/udp
sudo ufw allow 4789/udp

Depois, execute o comando abaixo para verificar se o UFW está ativo e se as regras foram aplicadas:

sudo ufw status

Também é útil conhecer os comandos básicos da interface de linha de comando (CLI) do Docker, pois você vai usá-los para gerenciar os serviços no swarm. Confira nossa folha de dicas do Docker, que reúne os comandos mais usados para diferentes tarefas.

Como criar um swarm no Docker

Para criar um Docker Swarm, primeiro é necessário inicializar uma máquina como nó gerenciador e conectar as demais como nós de trabalho. Depois, você poderá implantar serviços no cluster e usar os comandos da CLI do Docker para executar tarefas como escalar serviços e aplicar atualizações graduais.

Siga as etapas abaixo para criar um Docker Swarm e gerenciar serviços em várias instâncias.

Como o procedimento envolve nós gerenciadores e nós de trabalho, preste atenção em qual máquina cada etapa deve ser executada. Algumas operações são realizadas apenas no nó gerenciador, enquanto outras devem ser executadas nos nós de trabalho.

1. Instale o Docker em todas as instâncias

Execute em: todos os nós.

Como mencionado nos pré-requisitos, o Docker já vem pré-instalado nos planos de hospedagem Docker da Hostinger. Caso utilize outro ambiente, será necessário instalar o Docker em todos os nós antes de configurar o swarm.

Após a instalação, confirme se o Docker está instalado corretamente:

docker --version

A saída deve ser semelhante a esta:

Em seguida, verifique se o serviço do Docker está em execução:

sudo systemctl status docker

O status deve aparecer como active (running), indicando que o daemon do Docker está funcionando corretamente.

Para sair da tela de status, pressione Ctrl + C.

2. Inicialize o nó gerenciador do swarm

Execute em: nó gerenciador.

Depois de instalar o Docker em todos os nós, acesse o nó gerenciador, onde você vai criar o Docker Swarm. Primeiro, identifique o endereço IP dessa máquina.

Se você utiliza um VPS da Hostinger, encontrará o endereço IP na seção Detalhes do VPS, na página Visão geral, onde também é possível alterar o nome de host, como mostramos anteriormente.

Com o endereço IP em mãos, execute o comando abaixo para inicializar o swarm. Substitua [IP do nó gerenciador] pelo endereço IP real do seu VPS:

docker swarm init --advertise-addr [IP do nó gerenciador]

O comando retornará uma saída semelhante a esta:

Copie e salve o comando de conexão, pois você vai precisar dele para adicionar os nós de trabalho ao swarm.

Para confirmar que o swarm foi inicializado corretamente, execute:

docker info

O comando exibirá informações sobre o estado do swarm.

Depois, consulte a lista de nós do cluster:

docker node ls

Você verá informações como ID do nó, nome de host, status, disponibilidade e função.

Dica

Se precisar adicionar novos nós e não tiver mais o token de conexão, execute o comando abaixo no nó gerenciador para exibi-lo novamente:
docker swarm join-token worker

3. Adicione os nós de trabalho

Execute em: nós worker1 e worker2.

Agora, acesse o nó worker1 e execute o comando de conexão que você copiou do nó gerenciador:

docker swarm join --token [token de conexão] [IP do nó gerenciador]:2377

Se aparecer a mensagem “This node joined a swarm as a worker”, significa que o nó foi adicionado ao swarm corretamente.

Repita o procedimento no nó worker2 e em qualquer outro nó que queira adicionar ao cluster.

Dica

Sempre que adicionar um novo nó, volte ao nó gerenciador e execute docker node ls para confirmar que ele entrou no swarm.

4. Implante seu primeiro serviço

Execute em: nó gerenciador.

Volte ao nó gerenciador para implantar um serviço de teste chamado hello-world. Embora seja apenas um teste e você vá remover o serviço na próxima etapa, esse exercício ajuda a entender como funciona o gerenciamento de serviços no Docker Swarm.

Para criar o serviço hello-world, execute:

docker service create --replicas 1 --name hello-world alpine ping docker.com
  • docker service create: inicia a criação do serviço no Docker Swarm.
  • –replicas 1: define o número de réplicas do serviço. Neste caso, será executada apenas 1 réplica.
  • –name hello-world: define o nome do serviço como hello-world.
  • alpine ping docker.com: usa a imagem alpine para executar um ping em docker.com como teste simples.

Depois, liste os serviços em execução no swarm:

docker service ls

5. Inspecione e escale os serviços

Execute em: nó gerenciador.

Agora que o serviço de teste está em execução, vamos inspecioná-lo e aumentar o número de réplicas no swarm.

Confira os detalhes do serviço

Para consultar os detalhes do serviço hello-world, execute:

docker service inspect --pretty hello-world

O comando exibirá informações detalhadas sobre o serviço, incluindo ID, réplicas e outras configurações. A flag –pretty formata a saída para facilitar a leitura.

Veja em quais nós o serviço está em execução

Para verificar em quais nós o serviço está sendo executado, use:

docker service ps hello-world

O comando lista todas as tarefas associadas ao serviço hello-world e mostra em quais nós elas estão em execução.

Escale o serviço

Para escalar um serviço, basta alterar o número de réplicas. Por exemplo, para aumentar o número de réplicas do hello-world para três, execute:

docker service scale hello-world=3

O Docker Swarm criará réplicas adicionais do serviço nos nós disponíveis.

Confira a distribuição das tarefas após o escalonamento

Depois de escalar o serviço, verifique como as tarefas estão distribuídas entre os nós:

docker service ps hello-world

Agora, você deverá ver as tarefas distribuídas entre os três nós, em vez de concentradas em apenas um, como no resultado anterior do mesmo comando.

Remova o serviço

Após inspecionar e escalar o serviço, remova-o do swarm com o comando:

docker service rm hello-world

Esse comando exclui o serviço hello-world do swarm com segurança.

Confirme a remoção do serviço

Para verificar se o serviço foi removido, execute:

docker service ls

Se a remoção do hello-world tiver sido concluída corretamente, ele não aparecerá mais na lista.

6. Aplique atualizações graduais aos serviços

Execute em: nó gerenciador.

As atualizações graduais, também conhecidas como rolling updates, permitem atualizar os serviços gradualmente, ajudando a evitar períodos de indisponibilidade. O Docker Swarm atualiza uma réplica por vez e passa para a próxima após concluir a atualização anterior.

Primeiro, vamos implantar um serviço usando a versão 7.4.0 da imagem Docker do Redis. Depois, vamos atualizá-lo para a versão 7.4.1 usando esse método.

Implante um serviço Redis

Comece criando um serviço com uma versão mais antiga da imagem Docker do Redis para atualizá-la posteriormente:

docker service create --name redis --replicas 3 redis:7.4.0

Atualize o serviço

Para atualizar o serviço, execute o comando abaixo, especificando uma versão mais recente da imagem do Redis:

docker service update --image redis:7.4.1 redis

O Docker Swarm substituirá gradualmente os contêineres antigos pelos atualizados, ajudando a manter a disponibilidade do serviço durante o processo.

Confira se a versão foi atualizada

Para verificar a versão do serviço e confirmar que a nova imagem está sendo utilizada, execute:

docker service inspect --pretty redis

Verifique em quais nós o serviço está em execução

Para acompanhar a atualização gradual e verificar quais contêineres continuam em execução e quais estão sendo substituídos, use:

docker service ps redis

O comando exibirá uma lista das tarefas do serviço. As tarefas dos contêineres atualizados aparecerão com o estado desejado Running, enquanto as dos contêineres antigos aparecerão como Shutdown.

7. Bloqueie o swarm

Execute em: nó gerenciador.

Ao ativar o bloqueio automático do swarm, você passa a precisar de uma chave para desbloquear o nó gerenciador após a reinicialização do Docker. Esse recurso protege as chaves de criptografia do swarm e ajuda a impedir o acesso não autorizado a informações confidenciais do cluster.

Important

Não é necessário desbloquear o swarm apenas para adicionar um novo nó.

Ative o bloqueio automático do swarm

É possível ativar o bloqueio automático durante a inicialização do swarm usando a flag –autolock, como neste exemplo:

docker swarm init --autolock --advertise-addr [IP do nó gerenciador]

Como não ativamos esse recurso na inicialização, ainda podemos habilitá-lo no swarm existente com o comando:

docker swarm update --autolock=true

Com isso, o nó gerenciador será bloqueado automaticamente sempre que o serviço do Docker for reiniciado. O comando também gera uma chave para desbloqueá-lo. Guarde essa chave em um local seguro.

Para desativar o bloqueio automático, basta alterar o valor da flag –autolock de true para false.

Recupere a chave de desbloqueio

Se você não salvou a chave ao ativar o bloqueio automático, pode recuperá-la executando:

docker swarm unlock-key

Desbloqueie o swarm

Se o bloqueio automático estiver ativado, será necessário desbloquear o swarm após reiniciar o serviço do Docker no nó gerenciador ou realizar uma manutenção que envolva essa reinicialização. Para isso, execute:

docker swarm unlock

O sistema solicitará a chave de desbloqueio que você salvou anteriormente.

Dica

Para proteger dados confidenciais, utilize os segredos de build do Docker. Embora esse recurso não proteja diretamente o swarm, ele ajuda a manter credenciais e informações sensíveis protegidas durante a criação das imagens e a execução dos contêineres.

8. Gerencie e faça a manutenção dos nós

Execute em: nó gerenciador.

Gerenciar um swarm exige verificar regularmente a disponibilidade e a função de cada nó. Isso ajuda a manter o cluster funcionando corretamente e a evitar interrupções.

Inspecione um nó específico

Para consultar as informações de um nó, execute o comando abaixo, substituindo [nome do nó] pelo nome correspondente:

docker node inspect [nome do nó]

O comando exibirá o status atual, a disponibilidade e as funções do nó no swarm.

Drene um nó

Ao drenar um nó, você impede que ele receba novas tarefas, permitindo realizar a manutenção com segurança e sem interromper o funcionamento do swarm:

docker node update --availability drain [nome do nó]

Esse comando impede que novas tarefas sejam atribuídas ao nó e encerra as tarefas existentes, que são recriadas em outros nós disponíveis.

Pause um nó

Pausar um nó impede que novas tarefas sejam agendadas nele, mas permite que as tarefas existentes continuem em execução. Para isso, use:

docker node update --availability pause [nome do nó]

Essa opção é útil quando você precisa interromper temporariamente a atribuição de novas tarefas a um nó sem afetar as operações em andamento.

Restaure um nó drenado ou pausado

Após concluir a manutenção, restaure o funcionamento normal do nó alterando sua disponibilidade de drain ou pause para active:

docker node update --availability active [nome do nó]

Promova um nó a gerenciador

Para permitir que um nó gerencie o swarm, promova-o à função de gerenciador com este comando:

docker node promote [nome do nó]

Rebaixe um nó gerenciador a nó de trabalho

Em alguns casos, pode ser necessário rebaixar um nó gerenciador à função de nó de trabalho, seja por uma reorganização do cluster ou para realizar manutenção. Nesse caso, execute:

docker node demote [nome do nó]

Dica

Em vez de gerenciar cada nó separadamente, você pode alterar a função de vários nós com um único comando. Por exemplo, para promover os nós worker1 e worker2 à função de gerenciadores, execute:
docker node promote worker1 worker2

9. Remova os nós e exclua o swarm

Execute em: nós worker1, worker2 e manager.

Por fim, você pode remover nós do swarm e até excluir o cluster inteiro, se necessário.

Remova um nó de trabalho do swarm

No nó worker1, execute o comando abaixo para que ele saia do swarm com segurança:

docker swarm leave

Repita o procedimento nos demais nós que deseja remover do swarm.

Exclua os nós que saíram do swarm

Depois que um nó de trabalho sair do swarm, acesse o nó gerenciador e remova-o da lista de nós:

docker node rm [nome do nó]

Com isso, o nó deixa de fazer parte da lista de nós do Docker Swarm. Você também pode remover vários nós de uma só vez, informando seus nomes no mesmo comando:

docker node rm [nome do nó 1] [nome do nó 2]

Exclua o swarm

Não existe um comando específico para excluir completamente um swarm. No entanto, você pode desativá-lo fazendo com que o último nó gerenciador saia do cluster:

docker swarm leave --force

Antes de executar o comando, confirme que esse é o último nó do swarm. Se ainda houver outros nós gerenciadores, o cluster continuará existindo.

Conclusão

O Docker Swarm facilita a implantação, o escalonamento e a atualização de aplicações em contêineres distribuídos por várias máquinas, além de ajudar a manter a infraestrutura disponível e resiliente.

Neste tutorial, mostramos como criar e gerenciar um Docker Swarm do zero:

  1. Prepare as instâncias VPS e instale o Docker em cada uma delas.
  2. Inicialize o nó gerenciador do swarm.
  3. Adicione os nós de trabalho ao cluster.
  4. Implante um serviço de teste para conhecer os recursos de gerenciamento de serviços.
  5. Inspecione e escale o serviço para entender a distribuição das tarefas.
  6. Aplique atualizações graduais para ajudar a evitar períodos de indisponibilidade.
  7. Bloqueie o swarm para aumentar a segurança.
  8. Gerencie e faça a manutenção dos nós.
  9. Remova os nós e exclua o swarm.

Como próximo passo, experimente implantar uma aplicação real no seu swarm, configurar o NGINX como proxy reverso para gerenciar o tráfego ou explorar as stacks do Docker para criar uma infraestrutura mais escalável e fácil de manter.

Perguntas frequentes (FAQ) sobre como criar um Docker Swarm

O que é o Docker Swarm?

O Docker Swarm é uma ferramenta nativa de clusterização e orquestração que permite gerenciar várias instâncias do Docker Engine como um único sistema virtual. Com ele, é possível implantar, escalar e manter aplicações em contêineres com alta disponibilidade e balanceamento de carga integrado entre vários nós.

Como adicionar nós a um Docker Swarm?

Para adicionar um nó, primeiro gere um token de conexão no nó gerenciador usando o comando docker swarm join-token worker. Depois, execute o comando de conexão no novo nó para integrá-lo ao swarm. O nó será adicionado automaticamente ao cluster.

Posso criar um Docker Swarm com vários hosts?

Sim. O Docker Swarm foi desenvolvido para ambientes com vários hosts. Você pode criar um swarm usando máquinas de diferentes hosts ou provedores de nuvem. Depois de conectadas, essas máquinas funcionam como um único cluster, permitindo executar serviços em vários hosts com distribuição integrada de serviços.

Todo o conteúdo dos tutoriais deste site segue os rigorosos padrões editoriais e valores da Hostinger.

Faradilla, mais conhecida como Ninda, tem 10 anos de experiência como linguista e 5 anos como Especialista em Marketing de Conteúdo na Hostinger. Ela gosta de acompanhar as tendências em tecnologia e de ajudar as pessoas a resolver seus problemas. No tempo livre, Ninda gosta de estudar idiomas e ciências da vida, além de assistir a vídeos de animais. Conecte-se com ela no LinkedIn.

Trusted by 4+ million website owners worldwide

See our 73.515 reviews on Trustpilot

Comentários

0 responses

Write a response

Por gentileza, preencha os campos solicitados.Marque o campo de aceitação da privacidade.Preencha os campos necessários e marque a opção de aceitar termos de privacidade.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Thank you! Your comment has been successfully submitted. It will be approved within the next 24 hours.