‫Agora que você entende os conceitos básicos da criação de um enxame de vários nós e criando redes de sobreposição e serviços
‫do Docker, vamos abordar a próxima coisa muito legal sobre Swarm, que é pilhas. Não há pilhas de panquecas,
‫mas pilhas de serviços. Em 1. 13, a Docker adicionou esta característica realmente excelente
‫que adiciona outra camada de abstração em cima das pilhas. Basicamente é compor arquivos para a produção de Swarm. Agora as pilhas
‫aceitam compor arquivos.
‫Dentro, há o que chamaríamos de uma definição declarativa, onde afirmamos que isso é o que eu
‫quero que seja o resultado final.
‫E é o trabalho do enxame descobrir tudo isso. são apenas serviços; São também redes e volumes.
‫Agora, não
‫E um pequeno espreitadela.
‫Na verdade, vai incluir segredos, sobre os quais falaremos nas próximas palestras.
‫Conseguimos usar um novo comando, que é empilhador de docker empilhar para importar este arquivo de compor e executar o comando
‫que colocamos nele.
‫A pilha gerencia tudo isso.
‫Não precisa de nós para começar a criar redes, ou primeiro criar volumes, mas podemos fazer isso totalmente.
‫Externo em nosso arquivo Compose para dizer oi, estas já são coisas que existem no meu enxame.
‫Podemos usar algo chamado Vá em frente e use aqueles, não se preocupe em criá-los.
‫Mas geralmente você acaba tendo suas pilhas apenas fazendo tudo por você porque é mais fácil assim.
‫Nós vamos obter alguns novos recursos em nosso arquivo de composição, então vamos começar
‫com aqueles que se parecem muito com o que tínhamos antes. Mas vamos ter essa nova chave implantada lá, ou
‫dicionário, que nos permite especificar as coisas específicas do Swarm.
‫Quantas réplicas queremos?
‫O que queremos fazer quando fazemos failover? Como queremos fazer atualizações contínuas, e todo esse
‫tipo de coisas que não nos importaria com nossa máquina de desenvolvimento local.
‫Mas isso vem a um preço, o que é que não podemos fazer o comando de construção ainda. Isso pode ser algo que nunca acontecerá
‫no Swarm porque a mentalidade aqui é que o edifício não deveria acontecer no seu
‫enxame de produção. Construir é algo que seu sistema CI deve fazer.
‫Talvez Jenkins ou algo parecido com o Codeship.
‫Uma vez que você criou suas imagens e colocá-las em seu repositório, essa pilha será realmente a
‫única para retirar essas imagens e implantá-las com as opções de implantação.
‫As boas notícias, porém, são que eles realmente se dão bem.
‫Em sua máquina local, o Compose realmente ignorará quando você executar o comando docker-compose.
‫Ele
‫realmente ignorará qualquer informação de implantação. Na verdade, vai dizer "hey, você tem informações de implantação aqui.
‫Eu realmente não posso usar isso, então eu vou ignorá-lo. "Da mesma forma, quando
‫você estiver no Swarm e você está implantando uma nova pilha ou uma atualização para uma pilha, ele realmente vai dizer
‫'hey, você tem comandos de compilação aqui.
‫Eu não faço construções, então eu vou ignorá-las e continuar. "O bom é que
‫você não precisa mudar seu arquivo. realmente ter um único arquivo Compose que faz
‫tudo o que precisamos para fazer no lado do desenvolvimento e no lado da implantação da produção.
‫Veremos mais tarde como podemos
‫É muito legal.
‫Finalmente, você realmente não precisa do Docker Compose CLI, o binário. Isso não precisa estar
‫no seu enxame. Porque novamente compor, o comando real, não é uma ferramenta de produção.
‫Não foi projetado para ser a produção.
‫Foi projetado para ser um desenvolvedor e ferramenta auxiliar de administrador de sistema.
‫É realmente melhor para o trabalho local em nossas máquinas.
‫O enxame, que é basicamente o Docker Engine. arquivos usando esse comando de pilha.
‫O Docker Engine agora pode aceitar compor Ele lê os arquivos de Composição sem precisar do Docker Composer em qualquer lugar do servidor.
‫Vamos rever realmente rápido quando olhamos para trás em nossos serviços.
‫Este é o aspecto do nosso serviço. Digamos que é E digamos que especificamos três réplicas disso.
‫Nós criaríamos um serviço. Nginx. Então, então, iria e criaria três tarefas no
‫orquestrador, e essas tarefas encontrariam determinados servidores, ou nós, para colocá-los e criariam contêineres.
‫Nas novas pilhas, estamos falando de vários serviços, um ou mais, certo. Você pode ter dezenas
‫de serviços lá. Nesse único arquivo YAML.
‫tínhamos antes, só agora conseguimos fazer volumes e redes de sobreposição nesse arquivo de Compose.
‫Eles agem exatamente como os serviços que E isso
‫resulta no que chamaríamos de pilha. Uma pilha controla todas essas coisas.
‫E ele realmente colocará seu nome corretamente em todos os
‫objetos, de modo que você possa facilmente contar quais são os relacionados com a qual pilha. Na verdade, ele também colocará rótulos, o
‫que abordaremos mais tarde, o que é mais metadados para que você possa determinar a pilha em que essa coisa particular veio.
‫Então, isso é realmente ótimo.
‫Agora, conseguimos usar um arquivo YAML para realmente fazer todas essas coisas que não queríamos digitar
‫nos comandos de serviço. Porque os comandos de serviço já eram meio difíceis e longos. ficou entediado, certo.
‫E então acabamos fazendo scripts Bash para executar esses comandos, e então
‫Então, agora que tivemos Swarm
‫por oito meses, agora temos esse recurso de pilha que gerencia esses serviços.
‫Observe que a pilha é apenas para um enxame.
‫Certo? Não pode fazer muitos enxames.
‫Só será executado em um enxame para que ele possa controlar todos os nós e implantar todos
‫esses serviços, redes e volumes.
‫realmente ter mais uma coisa nele, que são segredos, porque a pilha também pode controlar esses.
‫Devo dizer que este diagrama pode Veremos isso em uma palestra posterior nesta seção. ESTÁ BEM.
‫Vejamos as pilhas e como elas funcionam.
‫Estou de volta ao enxame de 3 nós que construímos anteriormente. Eu vou maximizar a janela no nó 1 porque
‫eu realmente não preciso dos outros dois nós.
‫Pelo menos eu não preciso da sua linha de comando ssh.
‫Vamos usar o exemplo do aplicativo de votação que fizemos em palestras anteriores para esta seção.
‫Se você se lembra do
‫nosso design para isso, eram cinco serviços diferentes, e todos tinham dependências umas das outras.
‫E, em última análise, nos deu dois sites diferentes.
‫Você passou e tenho certeza
‫de que criou a melhor lista de serviços com todos os valores e opções que ele precisava e foi perfeito, certo?
‫Estou aqui para lhe dizer que agora, isso não é mais necessário.
‫Era realmente importante para nós usá-los e nem tudo precisaria de um arquivo de pilha.
‫Mas agora eu tenho um arquivo de pilha.
‫Vamos dar uma olhada no real rápido, porque você notará que
‫parece muito um arquivo Compose porque é. menos a versão 3 ou superior.
‫A única coisa real que você precisa mudar, pois deve ser pelo
‫A versão mais recente agora é a versão 3. 1, mas tenho certeza que isso mudará à medida que continua a
‫mudar e amadurecer.
‫Mas você precisa da versão 3 para usar pilhas.
‫Você notará que temos nossos redis, nosso
‫db e nosso voto, e todas essas coisas que provavelmente são muito parecidas com você em seu próprio trabalho. Você provavelmente está muito familiarizado com aqueles e as imagens
‫que eles precisam, e os portos que eles precisam abrir e tudo isso.
‫Mas neste caso, você notará a implantação.
‫Implantar aqui é uma nova opção. Você verá aqui que eu estava especificando quantas réplicas
‫eu quero, qual é a quantidade de cópias dessa imagem que precisam ser executadas de cada vez.
‫E o que acontece quando faço uma atualização.
‫Então, quando faço uma atualização de pilha real, o que fará as atualizações do serviço.
‫Como eu quero que isso ocorra?
‫Certo?
‫Desejo que todos baixem ao mesmo tempo? Eu só quero um por vez?
‫Quantas demoras entre eles?
‫Há aqui algumas opções de opções.
‫Estamos apenas a coçar a superfície, mas você pode ver como eu tenho uma
‫política de reinício aqui que se o recipiente falhar, reinicie-o automaticamente.
‫Você pode ver aqui embaixo do banco de dados, eu realmente tive restrições para
‫garantir que ele esteja em um nó específico.
‫Ainda não falamos muito sobre as restrições, mas
‫existem maneiras de rotular objetos, isto é, contêineres ou imagens ou realmente qualquer coisa que possamos criar ou destruir em Swarm ou no próprio Docker.
‫que é um gerente obtém seus próprios rótulos.
‫Na verdade, podemos atribuir rótulos a qualquer um desses, incluindo nós, e um nó
‫Isso é muito fácil para nós fazer apenas dizer, hey, esse container deve ser executado em um nó que tenha esse
‫papel específico.
‫Grande exemplo lá. Ao nos deslocar para baixo, temos algumas opções de paralelismo que já vimos antes.
‫Esta opção de atraso é bastante legal. Se você tiver uma espécie
‫de tempo de aquecimento, quando você tiver recipientes que giram. Talvez eles tenham começado, mas na verdade não vão ao vivo por talvez 60 segundos ou algo assim.
‫Você pode adicionar atrasos lá. Na verdade, examinaremos aqueles mais tarde
‫durante a produção de implantações azul-verde. Por enquanto, você pode ver que tudo é bastante padrão.
‫Na verdade, temos ainda mais opções aqui. Você pode realmente ver que eu atribuo este um rótulo específico.
‫Eu tenho uma janela e uma tentativa máxima de política de reinício.
‫Então, se tentar reiniciar, e continua a falhar, não vai tentar mais de três vezes.
‫Vamos verificar isso.
‫Tudo o que tenho a fazer é fazer uma empilhadeira docker deploy -c para compor. Então vou usar um arquivo de composição.
‫Agora vou chamar ele de voto. E nós vamos lá. Na verdade,
‫ele não criou tudo e girá-lo tão rápido.
‫no agendador, que passará pelo processo de criação dos serviços, que então criam as tarefas, que então criam os contêineres.
‫Tudo o que fez foi criar esses objetos
‫Também tem que criar as redes, como você verá aqui. Lembre-se de que tínhamos o frontend e o backend para criar esses, bem
‫como uma rede padrão, que esse arquivo de pilha particular que
‫eu tinha estava usando uma rede padrão.
‫E então você verá esta opção para visualizador, que é uma nova que não usamos antes.
‫Vamos ver isso em um minuto.
‫Então, dê uma olhada no comando stack da docker um pouco mais.
‫Você verá que podemos implantar. Já fizemos isso.
‫Então temos um ls, um ps, um rm
‫e serviços.
‫Portanto, esse comando não tem muitos recursos para isso.
‫É bastante simples porque toda a funcionalidade está realmente no
‫arquivo Compose e realmente nos objetos que está criando. oops eu
‫Como já fizemos tudo isso, podemos fazer coisas como ls, o que nos mostra todas as nossas pilhas. tenho que especificar o
‫É um comando bastante básico. Nós só temos um. Então, se eu fizer um ps, isso realmente me mostra. nome. voto.
‫É chamado de voteapp.
‫Tenho que entender isso.
‫ESTÁ BEM.
‫Deixe-me de volta para que você possa ver isso um pouco melhor. Ali.
‫Estas são as tarefas reais. Então você pode ver em qual nó eles estão executando.
‫Na verdade não são os recipientes. Na verdade, é a tarefa que estamos vendo aqui. Porque se fosse o recipiente atual, veríamos
‫um nome grande e longo. Porque, se você
‫lembrar, os serviços que criamos anteriormente, eles tiveram esses nomes realmente
‫longos se realmente fomos e fizemos o docker ps. Certo? ou um docker ps, você obtém esses nomes muito longos.
‫Se eu fiz um container docker, E é porque todos obtêm um GUID,
‫porque cada recipiente tem que ser nomeado de forma exclusiva.
‫Então é assim que eles garantem que eles são sempre únicos e nunca colidem.
‫Então, o último aqui
‫é o serviço de stack da docker.
‫Eu gosto deste melhor, na verdade, porque me mostra minhas réplicas.
‫É como fazer
‫um serviço. já consegui o número adequado de contêineres já iniciados.
‫Isso me mostra quantas réplicas eu comecei para saber se eu Então, se eu quiser mergulhar mais fundo,
‫então eu poderia fazer uma pilha de docker stack. Nós realmente recebemos os nomes das tarefas aqui e nós vemos em quais nós estão executando.
‫Estes dois juntos realmente lhe dão uma imagem completa de como esse aplicativo inteiro está sendo executado.
‫Se eu quisesse mergulhar na rede, eu poderia fazer uma
‫rede docker, tal como nós normalmente faria.
‫E você pode ver essas três novas redes de sobreposição que foram criadas para este aplicativo. E observe que o
‫nome do aplicativo está sempre no início. A pilha sempre precede o nome do serviço.
‫Então, cada pilha se certificará de que o nome está na frente.
‫E então vamos verificar.
‫Deixe-me abrir meu navegador.
‫Tudo bem.
‫Podemos vê-los na porta 5000.
‫Eu tenho o site de votação em execução.
‫Eu vou para 5001.
‫Eu tenho o site de resultados para que eu possa acertar isso e depois ver o resultado.
‫Então, este novo que temos é chamado de Visualizador. ver na seção Recursos desta seção.
‫Está em 8080. O Visualizer é realmente uma ferramenta muito bonita para fins de demonstração. Tudo isso é feito pelo Docker, a propósito, e estes
‫Isso é realmente feito. são todos um repo de fonte aberta que você pode Então temos cores diferentes para cada serviço.
‫O resultado do voteapp é um verde.
‫E então, o redis é uma espécie de mostarda, e o voto é rosa. Você pode ver que há dois
‫votos e há dois redises.
‫É ótima para demonstrar o que acontece quando as coisas se movem ao redor do enxame.
‫Se eu realmente entrei no meu arquivo e fiz uma mudança.
‫Vamos ao aplicativo de votação e digamos que queremos mudar as réplicas para cinco.
‫Poderíamos atualizar o serviço. Mas isso é um tipo de AntiPattern. Se entrar e digitar manualmente, os comandos para o serviço, como a atualização do serviço docker,
‫isso significaria que na próxima vez que eu voltar a aplicar este arquivo YAML, ele
‫irá substituir essas alterações.
‫Se você já fez uma formação de nuvem na AWS ou em qualquer outro gerenciamento de configuração,
‫você sabe que, uma vez que você está usando um arquivo de configuração como esse para
‫gerenciar sua infra-estrutura, você realmente quer usar este arquivo porque será a fonte de verdade.
‫Portanto, provavelmente, na produção, seria algum tipo de arquivo que você mantinha em um Repositório Git
‫que você possui controle de versão, e você controla as mudanças, e dessa forma você pode reverter as mudanças.
‫Neste caso, vou mudar o arquivo rapidamente, e nós vamos executar
‫o mesmo comando, a empilhadeira do docker será implementada.
‫Observe que não temos uma atualização. Porque nós vamos implantar na mesma pilha e vai reconhecer que existe, e
‫que vamos atualizá-la com base nessas mudanças.
‫Para atualizá-lo, temos que nos certificar de que usamos o nome certo.
‫Então, é voteapp. E então note que está dizendo atualizar os serviços, mas reconhece que precisa alterá-los.
‫Então, se nós vamos ao nosso visualizador, você pode ver que nós já conseguimos.
‫Estamos hoje muito lentos hoje, não estamos.
‫Não podemos acompanhar o enxame. Nós já temos cinco desses aplicativos de votação já em execução.
‫Se eles demorassem um pouco para correr e lançar, nós realmente veríamos seus
‫estados mudarem aqui quando eles chegaram online.
‫Mas é um aplicativo web simples, então ele vai começar muito rápido.
‫OK.
‫Isso é pilha.
‫Agora vamos adicionar os segredos às nossas pilhas.
‫