Implantando e Configurando o Docker Swarm no Debian 12

O Docker é uma plataforma de virtualização baseada em contêineres que permite empacotar, distribuir e executar aplicativos junto com todas as suas dependências de forma isolada. Ele simplifica o desenvolvimento e a implantação, criando ambientes consistentes em diferentes sistemas, garantindo portabilidade e melhor aproveitamento de recursos. Cada contêiner funciona como uma unidade leve e autossuficiente, possibilitando que aplicações sejam executadas de maneira uniforme em qualquer ambiente compatível com Docker.

No entanto, ter apenas um servidor com Docker não garante alta disponibilidade. Se esse servidor falhar, todas as aplicações serão afetadas. É nesse cenário que o Docker Swarm se torna uma solução ideal, permitindo distribuir serviços entre vários servidores e garantindo resiliência e continuidade das aplicações.

No Docker Swarm é possível garantir alta disponibilidade, redundância de serviços e uma melhor escalabilidade da infraestrutura. Ele permite distribuir contêineres entre vários servidores, garantindo que, se um nó falhar, outro assuma automaticamente as cargas de trabalho. Dessa forma, as aplicações permanecem acessíveis, reduzindo riscos de indisponibilidade e trazendo mais segurança para o ambiente produtivo. 

Além disso, o Swarm facilita o balanceamento de carga, atualizações sem downtime e a expansão dos serviços conforme a necessidade. Em resumo, ele transforma um conjunto de servidores em um cluster unificado, mais eficiente, resiliente e preparado para lidar com demandas variáveis.

Todo o processo de gerenciamento e orquestração no Docker Swarm é realizado pelos nós Manager, que tomam decisões sobre escalonamento, criação de serviços, distribuição de tarefas e monitoramento do cluster. Já os nós Worker têm como principal função executar os contêineres, recebendo instruções dos Managers e mantendo os serviços em funcionamento.

IMPORTANTE

Para que o Swarm continue operando corretamente, é necessário que mais de 50% dos nós Manager estejam ativos, garantindo o quorum para tomada de decisões. Por esse motivo, recomenda-se trabalhar com um número ímpar de Managers, reduzindo o risco de empates e aumentando a resiliência do cluster, como é visto na imagem acima.

Vamos Para a Prática

Considerando que você já possui o Debian 12 instalado em seu laboratório, iremos montar um ambiente semelhante ao apresentado na imagem: um cluster com 3 nós Manager e 2 nós Worker, garantindo redundância no plano de controle e capacidade para execução dos serviços.

Primeiro, vamos atualizar a lista de pacotes disponíveis nos repositórios e, em seguida, atualizar os pacotes instalados no sistema.


sudo apt update && apt upgrade -y
Instalando Algumas dependências

Antes de prosseguir com a instalação, é importante garantir que algumas dependências estejam presentes no sistema. Esses pacotes são responsáveis por permitir o uso de repositórios HTTPS, gerenciar certificados, realizar downloads e adicionar fontes externas de software — algo essencial para instalar ferramentas que não estão disponíveis nativamente no repositório padrão do sistema.

Para instalar todas essas dependências de uma vez, execute o comando abaixo:


sudo apt install apt-transport-https ca-certificates curl software-properties-common
Instalando o Docker Engine no Debian 12 Bookworm

Com as dependências previamente configuradas, podemos iniciar o processo de instalação do Docker. Utilizaremos o Docker Community Edition (Docker CE), uma versão gratuita e open-source, amplamente utilizada para ambientes de desenvolvimento e produção. 

O primeiro passo consiste em adicionar a chave GPG oficial do Docker, responsável por validar a integridade dos pacotes que serão baixados. Em seguida, iremos adicionar o repositório oficial ao sistema, garantindo que as versões instaladas sejam sempre atualizadas e compatíveis com o Debian 12 (Bookworm).

Primeiro vamos baixar a chave GPG


curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Em seguida vamos adicionar o repositório oficial do Docker na lista de repositórios do APT, permitindo que o Docker seja instalado diretamente através do apt install com versões atualizadas e suportadas para o Debian 12.


echo "deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Instalando o Docker Engine no Debian 12 Bookworm

Agora Vamos atualizar a lista de pacotes nos repositórios e depois instalar o Docker Engine e o Docker CLI


sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io -y

Tudo ocorrendo bem é hora de iniciar o serviço do docker e habilitar a inicialização do serviço junto com o sistema Operacional.


sudo systemctl start docker
sudo systemctl enable docker

Depois que p comando acima for executado com êxito, porquestão de boas práticas, considere adicionar o usuário conectado no momento ao grupo docker, isso permite que você execute o docker sem invocar o sudo


sudo usermod -aG docker $USER
newgrp docker

Se tudo fluiu bem com esse comando abaixo deverá retornar a versão do docker


docker --version

O sistema retornará algo como o descrito abaixo:


root@docker05:~# docker --version
Docker version 29.1.2, build 890dcca
root@docker05:~#
Instalando Docker Compose

O Docker Compose é uma ferramenta simples que fornece uma maneira de orquestrar vários contêineres para trabalharem juntos, o que torna a implantação usando um yaml arquivo. Depois de instalar o Docker, você pode prosseguir com a instalação do Docker Compose.


sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Configurando a permissão de execução para o arquivo baixado


sudo chmod +x /usr/local/bin/docker-compose

Verificando a versão do docker-compose


docker-compose --version

Se tudo ocorrer bem você verá o retorno da versão do Docker compose, como descrito abaixo


root@docker05:~# docker-compose --version
Docker Compose version v5.0.0
root@docker05:~#

Agora vamos subir o Docker Swarm

Com o Docker instalado e funcionando em todos os servidores, podemos iniciar a configuração do Docker Swarm, que será responsável por transformar nossos hosts em um cluster unificado. Antes de iniciar, é importante definir quais máquinas serão Managers e quais atuarão como Workers.

No nosso cenário do projeto temos 5 servidores, seguem eles abaixo e suas respectivas funções:

  • Docker01 – Manager
  • Docker02 – Manager
  • Docker03 – Manager
  • Docker04 – Worker
  • Docker05 – Worker
Primeiro precisamos inicializar o swarm em um dos servidores que vai ser o manager, com o comando abaixo:

 


docker swarm init

Após inicializar o Swarm, vamos ingressar os servidores no swarm, cada um com a sua respectiva função, ainda logado no servidor que inicializou o swarm, vamos executar dois comandos, um para ingressar os servidores como Worker e o outro para ingressar os servidores como manager.

Gerando o token para ingressar servidor como MANAGER

docker swarm join-token manager
IMPORTANTE
O comando acima deve ser executado apenas no servidor que será o Manager inicial do cluster. Somente um nó com função de Manager pode gerar o token de integração necessário para que outros servidores participem do Swarm.

Após executar o comando acima  será retornado no terminal o seguinte valor:


root@docker01:~# docker swarm join-token manager
To add a manager to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-3tss3sweoei9i0kxllfakyf9hgff16cidgpcxomu3dcpha3fuu-5m55pf81mt1qrzojkl9qtkzjp 192.168.10.201:2377

Exato, agora que o token foi gerado no Manager principal, podemos adicionar o próximo servidor como novo Manager do cluster Swarm.

No servidor que será adicionado como manager, execute no terminal o comando fornecido pelo join token, gerado no comando acima:


docker swarm join --token SWMTKN-1-3tss3sweoei9i0kxllfakyf9hgff16cidgpcxomu3dcpha3fuu-5m55pf81mt1qrzojkl9qtkzjp 192.168.10.201:2377

Após ingressar os managers utilizando o comando acima, vamos vê os servidores que já estão no Swarm, utilizando o comando abaixo:


docker node ls

O comando retornará algo parecido com a informação abaixo:


root@docker01:~# docker node ls
ID                            HOSTNAME           STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
l8w71f18npkpyh9o2zf8qq7qi *   docker01           Ready     Active         Reachable        29.1.2
wgcs0701qylmmlsi2wii76dh0     docker02           Ready     Active         Leader           29.1.2
t0kkphlsxmnlfh9wk9aqxcnur     docker03           Ready     Active         Reachable        29.1.2

recebemos uma lista com todos os servidores que fazem parte do cluster Swarm. Essa saída é essencial para monitorar o ambiente e entender como os nodes estão configurados. As informações apresentadas incluem:

ID – Identificação única de cada node dentro do cluster

HOSTNAME – Nome do servidor registrado no Swarm

STATUS – Situação atual do node (por exemplo: Ready, Down, etc.)

AVAILABILITY – Indica se o servidor está disponível para receber workloads (Active, Drain, etc.)

MANAGER STATUS – Mostra se o node é Worker, Manager ou, ainda, se ele é o Líder do cluster (Leader)

O ponto mais importante dessa saída é o campo MANAGER STATUS, pois é ele que identifica qual servidor está atuando como Líder (Leader)

O Leader é quem coordena o estado do cluster, mantém a sincronização dos nodes e toma as decisões internas do Swarm. Os demais managers aparecem como Reachable, indicando que podem assumir o controle caso o líder fique indisponível.

Gerando o token para ingressar servidor como WORKER

Ainda logado em algum servidor que tem a função de manager, vamos gerar o token para ingressar os servidores que vão atuar como workers


docker swarm join-token worker

Após executar o comando acima será gerado o token de acesso, parecido com o descrito abaixo:


root@docker02:~# docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-3tss3sweoei9i0kxllfakyf9hgff16cidgpcxomu3dcpha3fuu-0tdit74irvf9t0xb9xlka3by3 192.168.10.202:2377

Token gerado vamos acessar os servidores que terão a função de workers e vamos executar no terminal o comando gerado acima para integração:


docker swarm join --token SWMTKN-1-3tss3sweoei9i0kxllfakyf9hgff16cidgpcxomu3dcpha3fuu-0tdit74irvf9t0xb9xlka3by3 192.168.10.202:2377

Após executar o comando de integração nos servidores que serão workers, podemos verificar o estado do cluster utilizando:


docker node ls

Esse comando lista todos os servidores que fazem parte do Swarm, exibindo informações como nome, status, disponibilidade e quem é o líder.

IMPORTANTE

Comandos relacionados à administração do cluster não podem ser executados em nodes do tipo worker, pois eles não possuem privilégios administrativos no Swarm. Apenas servidores com função de manager têm permissão para visualizar, gerenciar e executar comandos administrativos do cluster.

Portanto o comando docker node ls , funcionará somente em managers, e não será executado em workers.

Após executado o comando acima será retornado oseguinte valor no terminal:


root@docker02:~# docker node ls
ID                            HOSTNAME           STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
l8w71f18npkpyh9o2zf8qq7qi     docker01           Ready     Active         Reachable        29.1.2
wgcs0701qylmmlsi2wii76dh0 *   docker02           Ready     Active         Leader           29.1.2
t0kkphlsxmnlfh9wk9aqxcnur     docker03           Ready     Active         Reachable        29.1.2
kf98zk7znyiesu08k08r31tcw     docker04           Ready     Active                          29.1.2
incoxqmp6a6kvn6lxjmpev6cb     docker05           Ready     Active                          29.1.2

Pronto, o seu Docker Swarm está ativo e pronto para executar as suas aplicações.

Se esse material foi útil para você e te ajudou no processo, considere acompanhar o meu trabalho e ficar por dentro de novos conteúdos.

Minhas Redes:

4 comentários em “Implantando e Configurando o Docker Swarm no Debian 12”

  1. Pingback: Instalando o Portainer com Docker Compose – Blog Nexus

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *