Conheça como os containers Docker, que são leves, portáteis e independentes, contribuem para o aprimoramento do processo de desenvolvimento de software, a implementação de aplicativos e a flexibilidade empresarial.
Um livro intitulado Nailing Jelly to a Tree, lançado em 1981, caracterizou o software como algo “nebuloso e desafiador de ser controlado de forma eficiente”. Essa análise continua válida até os dias de hoje, mesmo após quatro décadas. O software, seja adquirido ou desenvolvido internamente, ainda apresenta desafios significativos em relação à implementação, gestão e execução.
Os containers Docker oferecem uma maneira de simplificar o software. Com o Docker, você pode empacotar um aplicativo de forma a lidar com questões de implantação e execução, como disponibilizá-lo em uma rede, gerenciar armazenamento, memória e I/O, e controlar permissões de acesso, de maneira consistente em todos os aplicativos em containers. Os containers Docker podem ser executados em qualquer host que suporte o sistema operacional (Linux ou Windows) com o tempo de execução Docker instalado.
Docker apresenta diversas vantagens adicionais além do encapsulamento prático, isolamento, portabilidade e controle. Os contêineres do Docker são leves, iniciam rapidamente e incluem recursos integrados para versionamento e reutilização de componentes. Além disso, podem ser facilmente compartilhados por meio do Docker Hub público ou de repositórios privados.
Os contêineres Docker são imutáveis, o que oferece segurança e vantagens operacionais. Qualquer modificação em um contêiner deve ser feita criando um novo contêiner distinto.
Neste artigo, será analisado como os recipientes Docker simplificam a criação e distribuição de software, discutindo os desafios que os contêineres enfrentam, em que situações eles são a solução ideal e quando não são.
Antes da popularização dos recipientes Docker.
Durante muitos anos, o software empresarial costumava ser instalado diretamente no hardware (“bare metal”) ou em uma máquina virtual, o que tornava difícil a sua mobilidade e atualização, dificultando a capacidade de TI de responder rapidamente às mudanças nas demandas do negócio.
Então surgiu a tecnologia de virtualização. Os hipervisores, também conhecidos como plataformas de virtualização, possibilitaram que várias máquinas virtuais compartilhassem um único sistema físico. Cada máquina virtual simula o comportamento de um sistema completo, incluindo sistema operacional, armazenamento e I/O, de forma independente. Isso permite que a área de TI responda de maneira mais eficiente às mudanças nos requisitos de negócios, já que as máquinas virtuais podem ser duplicadas, transferidas, movidas e redimensionadas conforme necessário para atender à demanda ou economizar recursos.
As máquinas virtuais contribuíram para a diminuição dos gastos, já que é possível consolidar um maior número delas em menos máquinas físicas. Além disso, é viável transformar sistemas legados em VMs e desativar fisicamente as máquinas antigas para gerar economia adicional.
Porém, as máquinas virtuais ainda apresentam desafios. Elas ocupam muito espaço (gigabytes), cada uma contendo um sistema operacional completo. A consolidação de muitos aplicativos virtualizados em um único sistema é limitada. O processo de provisionamento de uma VM ainda demanda tempo. Além disso, a portabilidade das VMs é restrita. À medida que as empresas ágeis e de rápido movimento buscam por velocidade, agilidade e eficiência, as VMs podem não ser capazes de atender a essas demandas.
Vantagens proporcionadas pelo uso do Docker container.
Os containers atuam de maneira semelhante às máquinas virtuais, porém de forma mais precisa e detalhada. Eles separam uma aplicação individual e suas necessidades, incluindo todas as bibliotecas externas necessárias para sua execução, do sistema operacional e de outros containers.
Todos os aplicativos contidos em contêineres compartilham um único sistema operacional, sendo isolados uns dos outros e do sistema geral. O sistema operacional fornece os recursos de isolamento necessários para essa separação. O Docker simplifica esses recursos por meio de interfaces e metáforas para os desenvolvedores.
Os benefícios dos contentores Docker são evidentes em diversas situações. Abaixo estão algumas das principais vantagens proporcionadas por Docker e contentores.
Docker possibilita uma otimização mais eficaz dos recursos do sistema.
As aplicações em contêineres consomem menos memória do que as máquinas virtuais, têm uma inicialização e encerramento mais rápidos e permitem uma maior densidade de empacotamento no hardware, resultando em economia de custos em TI.
A magnitude das economias de custos pode variar com base nos aplicativos utilizados e na intensidade dos recursos necessários, porém, os contêineres tendem a ser mais eficientes do que as máquinas virtuais. Além disso, é viável reduzir os gastos com licenças de software, uma vez que é necessária menos instâncias do sistema operacional para lidar com as mesmas cargas de trabalho.
Docker possibilita a aceleração dos processos de entrega de software.
O software empresarial precisa ser ágil para se adaptar rapidamente às mudanças, sendo capaz de se ajustar facilmente para atender à demanda e de ser atualizado de maneira simples para incluir novas funcionalidades conforme necessário pelo negócio.
Os contêineres Docker simplificam a implantação rápida de novas versões de software com funcionalidades de negócios atualizadas na produção, permitindo também a rápida reversão para uma versão anterior, se necessário. Além disso, facilitam a adoção de estratégias como implantações azuis/verdes.
Docker possibilita a transferência fácil de aplicativos para diferentes ambientes.
O local de execução de um aplicativo corporativo é importante, seja sob o firewall para manter a segurança ou em uma nuvem pública para maior acessibilidade e flexibilidade de recursos. Os contêineres Docker encapsulam todos os elementos necessários para a execução de um aplicativo, permitindo assim o fácil transporte entre diferentes ambientes. Isso significa que qualquer host com o tempo de execução do Docker instalado pode executar um contêiner Docker, seja um laptop de desenvolvedor ou uma instância de nuvem pública.
Docker se destaca na implementação de microserviços.
Os contentores Docker são práticos, fáceis de transportar e independentes, o que simplifica o desenvolvimento de software com abordagens inovadoras, permitindo evitar usar métodos ultrapassados para resolver desafios futuros.
Um dos tipos de software recipientes que tornam as coisas mais fáceis são os microserviços, nos quais as aplicações são compostas por vários componentes com pouca interdependência. Ao dividir aplicações tradicionais, chamadas de “monolíticas”, em serviços individuais, os microserviços permitem que diferentes partes de um aplicativo de negócios sejam escaladas, modificadas e servidas de forma independente – por equipes diferentes e em momentos diferentes, se necessário para atender às demandas do negócio.
Os contêineres não são obrigatórios para a adoção de microsserviços, mas são altamente compatíveis com essa abordagem e com práticas de desenvolvimento ágil em geral.
As questões relacionadas aos contêineres Docker não são solucionadas.
A principal consideração a ser feita sobre recipientes é a mesma recomendação válida para qualquer tecnologia de software: Não existe uma solução mágica. Os contêineres Docker não são capazes de resolver todas as questões por si só. Especificamente:
O Docker não resolverá suas questões de segurança.
O software contido pode oferecer uma camada adicional de segurança em comparação com o software sem proteção, mas essa proteção é apenas um aspecto a ser considerado no contexto geral da segurança de um aplicativo. Comparar a segurança do software em um recipiente com o software executado em metal nu é semelhante a comparar uma casa com portas trancadas com uma casa com portas abertas – não leva em conta outros fatores importantes, como o ambiente em que estão inseridos, a visibilidade de objetos valiosos que possam atrair ladrões, ou as rotinas das pessoas que frequentam o local.
O Docker não é capaz de converter automaticamente aplicativos em microserviços.
Se você coloca um aplicativo em um contêiner existente, é possível diminuir a quantidade de recursos que ele consome e facilitar sua implementação. No entanto, isso não altera automaticamente o design do aplicativo nem a forma como ele se conecta a outros aplicativos. Para obter esses benefícios, é necessário que o desenvolvedor dedique tempo e esforço, em vez de simplesmente seguir a ordem de colocar tudo em contêineres.
Se você inserir um antigo aplicativo monolítico ou no estilo SOA em um contêiner, você terá, na verdade, um aplicativo antigo dentro de um contêiner. Isso não o torna mais funcional para suas tarefas; pelo contrário, pode até torná-lo menos funcional.
Os recipientes não possuem os recursos necessários para criar aplicativos de estilo microservice por conta própria. É preciso um nível mais avançado de coordenação para alcançar esse objetivo. Kubernetes é frequentemente citado como um exemplo de sistema de coordenação. O modo de enxame Docker também pode ser empregado para controlar múltiplos contêineres Docker em diversos hosts Docker.
Docker não pode ser utilizado no lugar de máquinas virtuais.
Um equívoco comum sobre recipientes é que eles tornam as VMs obsoletas. Embora muitos aplicativos antes executados em VMs possam ser transferidos para recipientes, nem todos podem ou devem. Em setores com exigências regulatórias rigorosas, como exemplo, pode não ser viável substituir recipientes por VMs, já que as VMs oferecem um isolamento maior.
A argumentação em favor do uso de recipientes Docker.
A atividade de desenvolvimento empresarial é conhecida por ser discreta e lenta para se adaptar a mudanças. Os profissionais de desenvolvimento corporativo lidam diariamente com essas restrições – as limitações impostas pela área de TI e as exigências do negócio em geral. O uso de Docker e contêineres proporciona aos desenvolvedores mais liberdade, ao mesmo tempo em que oferece formas de criar aplicativos empresariais que se ajustam rapidamente às mudanças do ambiente de negócios.