Estratégias de Docker Swarm: Otimização em Produção
Domine Docker Swarm: Orquestração e Alta Disponibilidade
Docker SwarmDocker Swarm: Uma Visão Geral e HistóriaDescubra como o Docker Swarm unifica contêineres em clusters, facilitando a escalabilidade, alta disponibilidade e gerenciamento ágil de aplicações. é uma solução de orquestração de contêineres
Docker Swarm: Uma Visão Geral e HistóriaDescubra como o Docker Swarm unifica contêineres em clusters, facilitando a escalabilidade, alta disponibilidade e gerenciamento ágil de aplicações. que facilita a criação e o gerenciamento de um cluster de máquinas rodando Docker. A seguir, exploraremos os principais conceitos envolvidos no Docker Swarm e como eles se relacionam para fornecer orquestração e alta disponibilidade
Alta Disponibilidade e Balanceamento de Carga no Docker SwarmAprenda como o Docker Swarm assegura alta disponibilidade e balanceamento de carga com replicação, failover automático e monitoramento dos serviços..
Swarm🔗
Um SwarmConfigurando Docker Swarm em Diferentes AmbientesNeste tutorial, configure o Docker Swarm em ambientes locais, on-premises e na nuvem, garantindo segurança, escalabilidade e alta disponibilidade. é o agrupamento
🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. de vários nós Docker (máquinas ou hosts) que, em conjunto, formam um cluster capaz de executar contêineres distribuídos. Essa abordagem permite executar um ou mais serviços em diferentes hosts de forma escalável
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. e resiliente.
- O Swarm se utiliza do modo nativo de orquestração do Docker
🐳 Docker 101: Containerize sua API em 15 Minutos!Containerize sua API .NET em 15 minutos com Docker. Este tutorial prático ensina a construir e rodar containers de forma simples e eficiente., conhecido como Swarm
Configurando Docker Swarm em Diferentes AmbientesNeste tutorial, configure o Docker Swarm em ambientes locais, on-premises e na nuvem, garantindo segurança, escalabilidade e alta disponibilidade. Mode, para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! gerenciar a comunicação e o estado de cada nó.
- Cada nó no Swarm é instanciado como parte de um cluster, podendo assumir papéis específicos, como manager ou worker, de acordo com o design arquitetural do Docker Swarm
Docker Swarm: Uma Visão Geral e HistóriaDescubra como o Docker Swarm unifica contêineres em clusters, facilitando a escalabilidade, alta disponibilidade e gerenciamento ágil de aplicações..
Node🔗
Um Node (ou nó) é uma instância Docker (que pode ser uma máquina física ou virtual) que faz parte de um Swarm. Dependendo do seu papel, o nó pode executar🔍 Comandos: Desacople Ações dos Botões!Aprenda a implementar comandos em C# para desacoplar lógica e interface usando MVVM, com exemplos práticos e dicas para melhor testabilidade e manutenção. funções administrativas ou apenas executar as tarefas (containers) relacionadas aos serviços definidos.
Um cluster Docker SwarmConfigurando Docker Swarm em Diferentes AmbientesNeste tutorial, configure o Docker Swarm em ambientes locais, on-premises e na nuvem, garantindo segurança, escalabilidade e alta disponibilidade. pode ser composto por vários nós, e cada nó possui um conjunto de recursos (CPU, memória, rede, etc.) disponíveis para execução dos contêineres. A comunicação entre esses nós acontece por meio de protocolos internos de clustering.
Service🔗
O Service🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade. (ou serviço) é a unidade lógica de implantação em um cluster Docker Swarm
Configurando Docker Swarm em Diferentes AmbientesNeste tutorial, configure o Docker Swarm em ambientes locais, on-premises e na nuvem, garantindo segurança, escalabilidade e alta disponibilidade.. Quando se cria um serviço, define-se quantas réplicas (contêineres) serão executadas e em quais condições elas serão gerenciadas. O Swarm utiliza essas definições para escalar, distribuir e manter os contêineres em execução.
- Cada serviço está associado a uma imagem de contêiner e configurações
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. de rede, volumes e variáveis de ambiente.
- O Swarm
Configurando Docker Swarm em Diferentes AmbientesNeste tutorial, configure o Docker Swarm em ambientes locais, on-premises e na nuvem, garantindo segurança, escalabilidade e alta disponibilidade. se responsabiliza pela orquestração, garantindo que haja sempre o número definido de réplicas
Criando e Escalando Serviços no Docker SwarmDescubra como criar, gerenciar e escalar serviços no Docker Swarm, utilizando comandos simples para manter alta disponibilidade em seu cluster. em execução.
Task🔗
Uma TaskDiferenças entre Threads, Tasks e Delegates em C#Aprenda as diferenças entre Threads, Tasks e Delegates em C#. Este tutorial prático ensina como otimizar a execução paralela e melhorar o desempenho. (tarefa) é a menor unidade de trabalho no Docker Swarm
Docker Swarm: Uma Visão Geral e HistóriaDescubra como o Docker Swarm unifica contêineres em clusters, facilitando a escalabilidade, alta disponibilidade e gerenciamento ágil de aplicações.. Cada task é essencialmente um contêiner em funcionamento, criado a partir de um service. Quando escalamos ou atualizamos um serviço, o Swarm adiciona ou remove tasks, distribuindo-as pelos nós disponíveis.
- A relação entre Service
🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade. e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Task
Diferenças entre Threads, Tasks e Delegates em C#Aprenda as diferenças entre Threads, Tasks e Delegates em C#. Este tutorial prático ensina como otimizar a execução paralela e melhorar o desempenho. é análoga à de um “plano teórico” (service
🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade.) para a execução “real” (task).
- Se um contêiner cair ou ficar inoperante, o Docker Swarm
Docker Swarm: Uma Visão Geral e HistóriaDescubra como o Docker Swarm unifica contêineres em clusters, facilitando a escalabilidade, alta disponibilidade e gerenciamento ágil de aplicações. automaticamente cria uma nova task e a realoca em outro nó ou no mesmo nó (caso ainda seja viável).
Overlay Networks🔗
As Overlay Networks são redes virtuais construídas sobre a rede física existente, permitindo a comunicação entre contêineres distribuídos em diferentes nós. Em um cenário de orquestração, as overlay networks:
- Proporcionam isolamento
🗂️ Database per Service: Isole Dados como um Arquiteto Cloud!Descubra como implementar o padrão Database per Service em .NET 8, isolando bancos e garantindo escalabilidade e autonomia para microservices. e segurança por meio de segmentação de tráfego.
- Permitem que contêineres em diferentes hosts se comuniquem como se estivessem na mesma rede local.
- Facilitam a resolução de nomes de serviço, pois cada contêiner pode ser acessado por DNS dentro da rede overlay
Redes Overlay: Configuração e Boas PráticasAprenda a configurar redes Overlay no Docker Swarm para comunicação segura entre contêineres, garantindo escalabilidade e alta disponibilidade em seu ambiente..
Além disso, o Docker SwarmDocker Swarm: Uma Visão Geral e HistóriaDescubra como o Docker Swarm unifica contêineres em clusters, facilitando a escalabilidade, alta disponibilidade e gerenciamento ágil de aplicações. cria, por padrão, uma rede conhecida como ingress network para realizar balanceamento de carga
🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade. entre as réplicas de um serviço.
Balanceamento de Carga (Load Balancing)🔗
Dentro do Docker SwarmDocker Swarm: Uma Visão Geral e HistóriaDescubra como o Docker Swarm unifica contêineres em clusters, facilitando a escalabilidade, alta disponibilidade e gerenciamento ágil de aplicações., há um mecanismo de load balancing
🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade. (balanceamento de carga
🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade.) que distribui as requisições entre múltiplas réplicas de um mesmo serviço. Esse recurso permite que o Swarm escolha a Task
Diferenças entre Threads, Tasks e Delegates em C#Aprenda as diferenças entre Threads, Tasks e Delegates em C#. Este tutorial prático ensina como otimizar a execução paralela e melhorar o desempenho. correta e, assim, utilize melhor os recursos
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. do cluster, além de oferecer maior disponibilidade caso uma das réplicas fique indisponível.
- O balanceamento de carga interno
🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade. funciona com base nas portas configuradas em cada serviço.
- Caso a rede overlay
Redes Overlay: Configuração e Boas PráticasAprenda a configurar redes Overlay no Docker Swarm para comunicação segura entre contêineres, garantindo escalabilidade e alta disponibilidade em seu ambiente. esteja em uso, o Swarm gerencia o roteamento de maneira automática.
Docker Compose e Stacks🔗
Embora Docker🐳 Docker 101: Containerize sua API em 15 Minutos!Containerize sua API .NET em 15 minutos com Docker. Este tutorial prático ensina a construir e rodar containers de forma simples e eficiente. Compose seja frequentemente associado à execução de contêineres em um único ambiente, ele também pode ser utilizado junto ao Docker Swarm
Docker Swarm: Uma Visão Geral e HistóriaDescubra como o Docker Swarm unifica contêineres em clusters, facilitando a escalabilidade, alta disponibilidade e gerenciamento ágil de aplicações. por meio do conceito de Stacks. Uma Stack representa um conjunto de serviços
Criando e Escalando Serviços no Docker SwarmDescubra como criar, gerenciar e escalar serviços no Docker Swarm, utilizando comandos simples para manter alta disponibilidade em seu cluster. definidos em um arquivo YAML (o mesmo usado pelo Compose, mas com algumas extensões específicas), que pode ser implantado em um Swarm.
- As Stacks permitem versionar e compartilhar configurações
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. de serviços, redes e volumes, tornando a implantação de aplicações complexas mais simples e organizada.
- Mesmo que Compose e Stacks sejam conceitos levemente diferentes, eles se complementam para facilitar tanto o desenvolvimento local quanto a execução em produção em um cluster Swarm
Criando e Escalando Serviços no Docker SwarmDescubra como criar, gerenciar e escalar serviços no Docker Swarm, utilizando comandos simples para manter alta disponibilidade em seu cluster..
Escalabilidade e Replicação Automática🔗
Um dos grandes valores do Docker SwarmDocker Swarm: Uma Visão Geral e HistóriaDescubra como o Docker Swarm unifica contêineres em clusters, facilitando a escalabilidade, alta disponibilidade e gerenciamento ágil de aplicações. é a capacidade de escalabilidade
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos.. Você pode ajustar rapidamente quantas réplicas de um serviço deseja executar
🔍 Comandos: Desacople Ações dos Botões!Aprenda a implementar comandos em C# para desacoplar lógica e interface usando MVVM, com exemplos práticos e dicas para melhor testabilidade e manutenção. em todo o cluster. Ao definir o número de réplicas, o Swarm distribui as tasks pelos nós disponíveis, garantindo:
1. Redundância: se um nó falhar, há réplicasCriando e Escalando Serviços no Docker SwarmDescubra como criar, gerenciar e escalar serviços no Docker Swarm, utilizando comandos simples para manter alta disponibilidade em seu cluster. em outros nós.
2. Balanceamento de Carga🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade.: distribui o tráfego entre múltiplas réplicas
Criando e Escalando Serviços no Docker SwarmDescubra como criar, gerenciar e escalar serviços no Docker Swarm, utilizando comandos simples para manter alta disponibilidade em seu cluster..
3. Manutenção Simplificada: é possível fazer updates sem interromper completamente o serviçoCriando e Escalando Serviços no Docker SwarmDescubra como criar, gerenciar e escalar serviços no Docker Swarm, utilizando comandos simples para manter alta disponibilidade em seu cluster..
Tokens de Junção e Segurança🔗
Para que um novo nó participe de um cluster SwarmCriando e Escalando Serviços no Docker SwarmDescubra como criar, gerenciar e escalar serviços no Docker Swarm, utilizando comandos simples para manter alta disponibilidade em seu cluster., ele precisa de tokens de junção (join tokens). Esses tokens atuam como credenciais de acesso, diferenciando se o nó que ingressa será um nó manager
Entendendo o Papel de Managers e Workers no Docker SwarmDescubra as funções essenciais no Docker Swarm, diferenciando Managers que orquestram e Workers que executam contêineres para um cluster robusto e escalável. ou worker. Esse mecanismo:
- Restringe a adição
🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. aleatória de máquinas ao Swarm.
- Garante que a comunicação dentro do cluster
Como Instalar o Docker Swarm Passo a PassoAprenda de forma detalhada como instalar e configurar o Docker Swarm, integrando nós Manager e Worker para orquestração eficiente de contêineres. seja criptografada (via TLS).
- Facilita a geração ou revogação de tokens a qualquer momento.
Rolling Updates🔗
Rolling Updates🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade. descrevem o processo de atualizar
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. um serviço de forma gradual, sem downtime total. O Swarm permite definir regras de atualização para que pequenos conjuntos de tasks sejam substituídos de cada vez. Isso evita interromper todos os contêineres simultaneamente e, consequentemente, mantém o serviço disponível enquanto a atualização ocorre.
Motores de Agendamento (Scheduling)🔗
O Scheduling no Docker SwarmDocker Swarm: Uma Visão Geral e HistóriaDescubra como o Docker Swarm unifica contêineres em clusters, facilitando a escalabilidade, alta disponibilidade e gerenciamento ágil de aplicações. é responsável por decidir em qual nó cada task será executada. O Swarm verifica parâmetros como:
- Uso de CPU e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. memória.
- Restrições (labels) que possam definir qual nó é preferível para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! determinada task.
- Proximidade de dados ou de outros serviços
Criando e Escalando Serviços no Docker SwarmDescubra como criar, gerenciar e escalar serviços no Docker Swarm, utilizando comandos simples para manter alta disponibilidade em seu cluster..
Com base nesses critérios, o motor de agendamento escolhe o nó que melhor atende às necessidades do serviço em questão, garantindo maior eficiência e menor risco de sobrecarga🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!Aprenda sobre a técnica de sobrecarga de métodos no C# com exemplos e práticas recomendadas para melhorar a organização e legibilidade do seu código. em um nó específico.
Raft e Estado do Cluster🔗
No núcleo do Docker SwarmDocker Swarm: Uma Visão Geral e HistóriaDescubra como o Docker Swarm unifica contêineres em clusters, facilitando a escalabilidade, alta disponibilidade e gerenciamento ágil de aplicações., existe um banco de dados distribuído baseado em Raft que gerencia o estado do cluster
Como Instalar o Docker Swarm Passo a PassoAprenda de forma detalhada como instalar e configurar o Docker Swarm, integrando nós Manager e Worker para orquestração eficiente de contêineres.:
- Raft é responsável pela consistência dos dados entre os nós managers
Entendendo o Papel de Managers e Workers no Docker SwarmDescubra as funções essenciais no Docker Swarm, diferenciando Managers que orquestram e Workers que executam contêineres para um cluster robusto e escalável..
- As informações sobre serviços, configurações
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. e chaves de segurança são mantidas de modo compartilhado e sincronizado.
Esse mecanismo assegura a confiabilidade do cluster, mesmo em situações de falha de algum nó managerEntendendo o Papel de Managers e Workers no Docker SwarmDescubra as funções essenciais no Docker Swarm, diferenciando Managers que orquestram e Workers que executam contêineres para um cluster robusto e escalável..
Conclusão🔗
Compreender os termos e conceitos-chave🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. no Docker Swarm é essencial para aproveitar todo o potencial de orquestração de contêineres
Docker Swarm: Uma Visão Geral e HistóriaDescubra como o Docker Swarm unifica contêineres em clusters, facilitando a escalabilidade, alta disponibilidade e gerenciamento ágil de aplicações.. Cada um desses elementos forma um ecossistema integrado que simplifica:
- A criação de serviços
Criando e Escalando Serviços no Docker SwarmDescubra como criar, gerenciar e escalar serviços no Docker Swarm, utilizando comandos simples para manter alta disponibilidade em seu cluster. distribuídos.
- A implementação de redes sobrepostas para comunicação segura
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real..
- A escalabilidade automática
🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade. e o balanceamento de carga inteligente.
Ao ter clareza sobre SwarmConfigurando Docker Swarm em Diferentes AmbientesNeste tutorial, configure o Docker Swarm em ambientes locais, on-premises e na nuvem, garantindo segurança, escalabilidade e alta disponibilidade., Nodes, Services
🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade., Tasks
Diferenças entre Threads, Tasks e Delegates em C#Aprenda as diferenças entre Threads, Tasks e Delegates em C#. Este tutorial prático ensina como otimizar a execução paralela e melhorar o desempenho., Overlay Networks e demais aspectos, o profissional de TI pode desenhar arquiteturas de microsserviços
🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade. seguras, resilientes e altamente escaláveis, alinhadas às demandas modernas de desenvolvimento e operação de software.
Referência de rápidos termos:
Conceito | Definição |
---|---|
Swarm | Conjunto de nós Docker que atuam como um cluster. |
Node | Máquina física ou virtual que participa do cluster. |
Service | Unidade lógica de implantação, definindo imagem e configurações. |
Task | Contêiner em execução, instância real de um service. |
Overlay Network | Rede virtual que conecta contêineres em diferentes nós. |
Load Balancing | Distribuição de tráfego entre múltiplas réplicas. |
Docker Compose | Ferramenta de definição de serviços em YAML, usada com Stacks. |
Tokens de Junção | Credenciais para adicionar novos nós ao cluster. |
Rolling Updates | Processo de atualizar contêineres gradualmente, sem downtime. |
Estes pilares formam a base para qualquer implementação bem-sucedida de Docker SwarmDocker Swarm: Uma Visão Geral e HistóriaDescubra como o Docker Swarm unifica contêineres em clusters, facilitando a escalabilidade, alta disponibilidade e gerenciamento ágil de aplicações., garantindo escalabilidade
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos., confiabilidade e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. eficiência
⏱️ Testes de Performance: Garanta Velocidade Além da Funcionalidade!Descubra como medir, diagnosticar e otimizar performance em aplicações .NET com dicas práticas e ferramentas essenciais para devs. no desenvolvimento e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. na orquestração de aplicações em contêineres.
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Documentação oficial do Docker Swarm: docs.docker.com/engine/swarm/
- Guia Docker Swarm no LinuxHint: linuxhint.com/docker-swarm-tutorial-beginners/
- Introdução a Docker Swarm no blog oficial da Docker: www.docker.com/blog/tag/swarm/
- Tutoriais de Docker Engine Swarm: docs.docker.com/engine/swarm/swarm-tutorial/
- Tutorial Docker Swarm na DigitalOcean: www.digitalocean.com/community/tutorials/how-to-configure-a-docker-swarm-cluster-on-ubuntu-18-04