Com os aplicativos de 'revolução' do contêiner, cresceu muito mais do que ser apenas um banco de dados e um front -end. Os aplicativos são divididos em vários microsserviços e normalmente se comunicam através de uma API REST (normalmente cargas úteis formatadas JSON sobre HTTP). Os contêineres do Docker são ideais para esse tipo de arquitetura. Você pode empacotar seu 'Microservice' do front -end em um recipiente do docker, o banco de dados entra em outro e assim por diante e assim por diante. Cada serviço fala com outro sobre uma API de descanso predefinido, em vez de ser um monólito escrito como um único software.
Se você precisar implementar uma nova funcionalidade ou um recurso, e.G, um mecanismo de análise, você pode simplesmente escrever um novo microsserviço para isso e ele consumiria dados através da API REST exposta pelos vários microsserviços do seu aplicativo da web. E à medida que sua funcionalidade cresce com o tempo, esta lista de microsserviços também crescerá junto com ela.
Você não deseja implantar cada contêiner individual, configurá -lo e depois configurar todo o resto para falar com ele também. Isso será tedioso com até três recipientes. O Docker-Compose permite automatizar a implantação de vários contêineres.
Docker-Compose é uma das ferramentas mais simples que ajuda a transformar a idéia abstrata de microsserviços em um conjunto funcional de contêiner do docker.
Sistemas distribuídos
Agora que dividimos o aplicativo da web em vários contêineres, faz pouco sentido para mantê -los todos em um único servidor (pior ainda em uma única máquina virtual!) É aí que serviços como Docker Swarm e Kubernetes entram em jogo.
O Docker Swarm permite que você execute várias réplicas do seu aplicativo em vários servidores. Se o seu microsserviço for escrito de uma maneira que ele possa escalar 'horizontalmente', você pode usar o Docker Swarm para implantar seu aplicativo da web em vários data centers e várias regiões. Isso oferece resiliência contra o fracasso de um ou mais data centers ou links de rede. Isso normalmente é feito usando um subcomando em Docker, ou seja, pilha do Docker.
O Docker Stack Subcomando se comporta muito mais como o comando Docker-Compose e isso pode levar a conceitos errôneos a alguém que usa qualquer uma das tecnologias.
Fonte de confusão
Em termos de uso e fluxo de trabalho, ambas as tecnologias funcionam muito parecidas entre si, e isso causa confusão. A maneira como você implanta seu aplicativo usando o Swarm Docker ou o Docker-Compose é muito semelhante. Você define seu aplicativo em um arquivo YAML, este arquivo conterá o nome da imagem, a configuração de cada imagem e também a escala (número de réplicas) de que cada microsserviço deverá se reunir na implantação.
A diferença está principalmente no back-end, onde o Docker-Compose implementa contêineres em um único host do Docker, o Docker Swarm o implanta em vários nós. Falando vagamente, ainda pode fazer a maioria das coisas que o Docker-CompomPeSe, mas escala-o em vários hosts do Docker.
Semelhanças
Tanto o Docker Swarm quanto o Docker-Compose têm as seguintes semelhanças:
Diferenças
As poucas diferenças entre o Docker Swarm e o Docker-Compose:
Um caso de uso para o Docker-Compose
Como descrito acima, ambos são ferramentas completamente diferentes e cada uma resolve um problema completamente diferente, por isso não é como se um seja uma alternativa para o outro. No entanto, para dar aos novos cantos uma noção do que estou falando, aqui está um caso de uso para o Docker Compose.
Suponha que você queira se auto-hospedar um blog WordPress em um único servidor. Configurando ou mantê-lo não algo que você deseja fazer, manualmente, então o que você faria é instalar o Docker e o Docker-Compor em seu VPS, criar um arquivo YAML simples que define todos os vários aspectos da sua pilha WordPress, como abaixo, :
Nota: Se você estiver usando o abaixo para implantar um site WordPress, altere todas as senhas para algo seguro. Melhor ainda, use segredos do Docker para armazenar dados confidenciais, como senhas, em vez de tê -los em um arquivo de texto simples.
Versão: '3'
Serviços:
DB:
Imagem: MySQL: 5.7
volumes:
- db_data:/var/lib/mysql
Reinicie: sempre
ambiente:
Mysql_root_password: algum padrão
Mysql_database: wordpress
Mysql_user: wordpress
Mysql_password: wordpress
WordPress:
depende de:
- dB
Imagem: WordPress: mais recente
Portas:
- "8000: 80"
Reinicie: sempre
ambiente:
Wordpress_db_host: db: 3306
Wordpress_db_user: wordpress
Wordpress_db_password: wordpresspassword
Wordpress_db_name: wordpress
volumes:
db_data:
Depois que o arquivo é criado e o Docker e o Docker-Compose são instalados, tudo o que você precisa fazer é executar:
$ Docker -Compõe Up -d
E seu site estará em funcionamento. Se houver uma atualização, execute:
$ docker-compor para baixo
Em seguida, jogue fora as imagens antigas do Docker e execute o comando do Docker -Compose Up -d e novas imagens serão automaticamente puxadas. Como você tem os dados persistentes armazenados em um volume do Docker, o conteúdo do seu site não será perdido.
Quando usar o Swarm Docker
Enquanto o Docker-Compose é mais uma ferramenta de automação, o Docker Swarm é destinado a aplicativos mais exigentes. Aplicativos da Web com centenas ou milhares de usuários ou carga de trabalho que precisam ser escalados para paralelamente. Empresas com grande base de usuários e requisitos rigorosos do SLA desejariam usar um sistema distribuído como o Docker Swarm. Se o seu aplicativo estiver sendo executado em vários servidores e vários data centers, as chances de tempo de inatividade devido a um dc ou link de rede afetado será significativamente reduzido.
Dito isto, hesito em recomendar o Swarm Docker para casos de uso da produção, porque tecnologias concorrentes como Kubernetes são indiscutivelmente mais apropriadas para esta tarefa. Kubernetes é suportado nativamente em muitos provedores de nuvem e funciona muito bem com os contêineres do Docker, para que você nem precise reconstruir seu aplicativo para aproveitar o Kubernetes.
Espero que essa divagação no Docker e seus projetos de satélite tenha sido informativa e você esteja mais preparado para o ecossistema Docker.