Os contêineres valem a dor de cabeça?
Containers são um conceito Unix que permite que os aplicativos sejam empacotados com todas as dependências necessárias em uma imagem fácil de executar. Isso tem benefícios retumbantes para um fluxo de trabalho do DevOps, mas vale a pena o trabalho extra?
Contêineres sincronizam ambientes de desenvolvimento e produção
Com os contêineres, a idéia é que eles empacotem tudo o que você precisa para executar seu código em uma imagem facilmente distribuível. Isso significa que tudo o que é necessário para executar a imagem é baixá-la e executar a janela de encaixe.
Longe vão os dias em que ele não funciona na minha máquina. ” Com os contêineres, desde que todo mundo tenha o Docker instalado corretamente e saiba como usá-lo, o contêiner deve ser executado quase exatamente da mesma forma na sua máquina, como todos os outros.
Além disso, isso também se aplica ao seu ambiente de produção. Você pode ativar alguns recursos de desenvolvedor nas compilações de desenvolvimento, mas, na maioria das vezes, os contêineres poderão ser enviados como estão para seus servidores de produção. Você não deve ter muitos problemas com hospedagem de contêineres.
Os contêineres permitem o dimensionamento eficiente
Por ser tão fácil executar um contêiner, existem muitos serviços que os executam para você. Geralmente, elas são chamadas de ferramentas de orquestração que gerenciam a execução de várias instâncias de contêineres em muitos servidores.
A AWS possui o Elastic Container Service, que gerencia a execução de seus contêineres em uma frota de instâncias do EC2 ou em seu próprio serviço Fargate. O Kubernetes é de código aberto e muitos provedores de nuvem fornecem integrações usando-o.
Cada serviço de orquestração poderá monitorar a integridade de suas instâncias e ativar novas quando o tráfego for alto. Isso permite um dimensionamento eficiente, que pode economizar muito dinheiro em custos de hospedagem (até 90% na AWS com Auto Scaling e Instâncias Spot) e significa que você não precisa se preocupar muito em superar sua infraestrutura.
Além disso, os contêineres não apresentam a mesma degradação de desempenho que ocorre com as máquinas virtuais em execução, pois não precisam executar um sistema operacional convidado para todos os aplicativos. Isso torna a hospedagem de contêiner mais barata em geral e muito mais eficiente.
E tudo isso é ativado devido à natureza dos contêineres, sem a necessidade de trabalho extra. Você pode fazer o mesmo na AWS usando AMIs personalizadas, mas elas são muito mais difíceis de gerenciar que os contêineres e, de qualquer maneira, você estará fazendo o mesmo trabalho.
Versão de contêineres controle seu SysAdmin
Talvez a consequência mais legal dos contêineres seja que eles tirem toda a configuração do servidor da cabeça do seu SysAdmin e entrem no git, onde podem ser gerenciados e rastreados. Como todo novo pacote, arquivo de configuração, script de instalação e dependência está localizado na pasta de construção do contêiner, é trivial conectá-lo ao controle de origem.
Os contêineres se integram particularmente bem ao lado de Operações de um fluxo de trabalho do DevOps. Eles permitem que você use os mesmos sistemas de gerenciamento e teste de versão existentes para gerenciar a arquitetura do servidor. E como todos estão sincronizados usando o mesmo ambiente para desenvolver, construir e testar, ele deve fluir muito bem.
Além disso, o Docker funciona bem com sistemas de integração contínua. As compilações do Docker são fáceis de automatizar, especialmente se você estiver usando os pipelines do Azure. Enviar uma imagem do Docker para sua frota de servidores é tão simples quanto atualizar a imagem no repositório. Você pode até implantar um novo contêiner em um subconjunto de servidores para monitorar sua integridade antes de implantar em toda a frota, algo que não seria trivial para implementar sem contêineres.
A desvantagem: a dor de cabeça é real
Sejam reais os contêineres são certamente a solução mais elegante, mas eles são muito mais difíceis de configurar e trabalhar, em comparação com apenas iniciar uma nova caixa Linux e gastar uma hora instalando Programas. Todo mundo já fez o último, mas o primeiro exige muito mais tempo de investimento em geral. (Porém, se você estiver executando vários servidores, o Docker precisará ser configurado apenas uma vez.)
Se sua tarefa não é particularmente complicada ou você não tem muita demanda, implementá-la com contêineres pode ser um exagero. Não há motivo real para contêiner nginx e nó se você estiver executando apenas em uma instância.
E enquanto os contêineres facilitam o gerenciamento de todas as dependências que podem surgir com a execução do aplicativo, também é muito difícil executar o Docker e vincular portas sempre que você quiser testá-lo, em comparação com apenas npm start ou algo semelhante no diretório do projeto. Definitivamente, isso pode ser mitigado com scripts de inicialização, mas se você estiver no macOS ou no Windows, ainda estará executando uma VM inteira apenas para carregar seu aplicativo Web.
No final do dia, se você é um fã do Docker e de seus conceitos, nada o impede de usá-lo em seus projetos pessoais. Mas os benefícios do Docker realmente só superam as dores de cabeça quando você está operando em uma equipe maior. Em um ambiente de equipe, trazer tudo o que envolve o aplicativo para seus sistemas de gerenciamento de versões e o fluxo de trabalho do DevOps ajuda a produção a fluir sem problemas.
Via: How to Geek
Nenhum comentário