Kong Yang, Head Geek da SolarWinds
Ecossistemas de contêineres de empresas como Google, Docker, CoreOS e Joyent são certamente uma das inovações de TI mais intrigantes no espaço corporativo e da computação em nuvem. No ano passado, organizações dos principais setores, desde finanças até comércio eletrônico, demonstraram interesse em contêineres como um meio econômico, portátil e conveniente de criar um aplicativo. As perspectivas futuras ofereciam às organizações um novo modelo empolgante para comparar e contrastar com a virtualização.
Mas, com todo esse burburinho, muitas organizações e profissionais de TI ainda lutam para compreender a própria tecnologia e como aproveitar seus benefícios exclusivos, principalmente quando Docker, o líder do mercado, começa a expandir os casos de uso de contêineres para o cenário de arquitetura com controle de estado que é comum com aplicativos corporativos. Este manual de tecnologia pretende fornecer clareza sobre contêineres e tudo o que você precisa saber para aproveitar bem essa tecnologia.
Conceitos básicos sobre contêineres: retorne aos princípios fundamentais
Para começar, um dos principais equívocos sobre contêineres é que eles são substitutos essenciais das máquinas virtuais (VMs). Apesar de eles terem sido implementado dessa forma por alguns dos primeiros usuários corporativos, isso não é verdade. Em poucas palavras, um contêiner consiste em todo um ambiente de tempo de execução (um aplicativo, suas dependências, bibliotecas e outros binários e os arquivos de configuração necessários à sua execução) em um único pacote projetado para uso leve e de curto prazo. Quando implementados corretamente, os contêineres possibilitam ambientes de desenvolvimento muito mais ágeis e portáteis. Os contêineres simplesmente abstraem a necessidade de servidores tradicionais e sistemas operacionais.
A virtualização, por outro lado, inclui uma camada de hipervisor (seja o Microsoft® Hyper-V®, seja o VMware vSphere®) que segrega máquinas virtuais e seus sistemas operacionais individuais.® A virtualização abstrai recursos da infraestrutura de hardware subjacente, que consiste em servidores e armazenamento, para que as VMs possam usar esses pools de recursos. As VMs podem levar consideravelmente mais tempo que os contêineres para serem preparadas, provisionadas e implantadas e tendem a permanecer em tarefas por muito mais tempo que os contêineres. Como resultado, as VMs tendem a ter ciclos de vida de aplicativos muito mais longos.
Portanto, uma diferença fundamental é que o modelo de contêiner não pretende ser um ambiente de longo prazo como as VMs; em vez disso, eles são projetados para (idealmente) serem emparelhados com microsserviços para fazer uma coisa muito bem e seguir em frente. Com isso em mente, vamos discutir alguns dos seus benefícios.
Em primeiro lugar, como mencionei, os contêineres são ativados com muito mais rapidez e usam menos memória, exigindo uma área de cobertura menor de recursos de datacenter que a virtualização tradicional. Isso é importante, pois possibilita eficiência de processo para a equipe de desenvolvimento, o que, por sua vez, leva a desenvolvimento e ciclos de teste de garantia de qualidade muito mais curtos. Com contêineres, um desenvolvedor pode escrever e testar rapidamente o código de teste em dois ambientes de contêiner paralelos para compreender o desempenho de cada um deles e decidir sobre a melhor bifurcação de código a adotar. O Docker cria uma imagem automaticamente, lendo o conjunto de instruções específico armazenado no Dockerfile, um arquivo de texto que contém todos os comandos necessários para criar uma determinada imagem. Isso significa que os contêineres devem ser efêmeros, ou seja, que eles podem ser interrompidos, alterados e criados novamente com uma definição e configuração mínima.
Os contêineres podem também oferecer suporte à colaboração maior entre todos os vários membros da equipe que estejam contribuindo para um projeto. O controle de versão e a consistência dos aplicativos podem ser problemáticos com vários membros de equipe que trabalham em seus próprios ambientes virtuais. Pense em todas as combinações diferentes de configurações de ambiente. Os contêineres, por outro lado, geram consistência na implantação de uma imagem; combinar isso com um hub como o GitHub® possibilita o rápido empacotamento e implantação de imagens que são consistentemente conhecidas como boas. A capacidade de ativar com rapidez imagens simétricas de um aplicativo permitirá que vários membros da mesma equipe de desenvolvimento testem e retrabalhem linhas de código em execução em ambientes de imagens separados, mas consistentes, que, por fim, podem ser sincronizados e integrados perfeitamente.
Curiosamente, o Docker começou a evoluir a tecnologia de contêiner para ir além do modelo típico de teste e desenvolvimento e agora não só oferece valor comercial adicional, mas também reduz a barreira do consumo para empresas. O mecanismo do Docker é executado em plataformas de desktop importantes, como os sistemas operacionais Windows®, Linux® e Macintosh®, que permitem que as organizações experimentem com contêineres enquanto realizam demonstrações e testes de alguns casos de uso em laptops. Além disso, a aquisição recente do Infinit®, um fornecedor de armazenamento distribuído, pela Docker, enfatiza a intenção da empresa de expandir e oferecer suporte às necessidades corporativas. A integração da tecnologia da Infinit possibilita que os desenvolvedores implantem a arquitetura Web com controle de estado e aplicativos corporativos herdados. Essa combinação de tecnologias pretende influenciar organizações sobrecarregadas com atraso tecnológico e aplicativos herdados para a adoção de contêineres.
Virtualização ou contêineres: Qual das opções é a certa para você?
Pois bem, como você decide quando aproveitar contêineres? Tudo começa com uma compreensão fundamental da arquitetura do seu aplicativo e de seu ciclo de vida, do desenvolvimento e produção à desativação. O estabelecimento dessa linha de base ajudará você a decidir se esses aplicativos são ideais para o contêiner ou se é melhor deixá-los como VMs.
Um site de comércio eletrônico pode decidir fazer a transição do uso de várias VMs que estejam sendo executadas em várias funções para um modelo baseado em contêiner, no qual o aplicativo "monolítico" em camadas é dividido em vários serviços distribuídos em nuvem pública ou infraestrutura interna. Uma imagem de contêiner seria então responsável pelo cliente do aplicativo, outra imagem de contêiner pelos serviços da Web etc. Esses contêineres podem ser enviados para um número ilimitado de máquinas de host com definições de configuração idênticas, para que você possa dimensionar e promover a consistência em seu site de comércio eletrônico.
No entanto, embora alguns aplicativos do seu ambiente possam ser candidatos ideais para mudança para contêineres, o custo para envolver pessoas, processos e tecnologia permanece um grande obstáculo para a maioria das organizações que oferecem suporte para virtualização atualmente. Investimentos pesados em soluções de virtualização vSphere, Hyper-V ou KVM, sem mencionar o conhecimento técnico especializado acumulado e o processo para oferecer suporte a eles, é um dos motivos fundamentais pelos quais as empresas de hoje estão se esforçando para adotar a tecnologia de contêiner.