Jump to section

Docker: desenvolvimento de aplicações em containers

Copiar URL

Relatório Global Tech Trends 2024

A tecnologia está passando por uma acelerada transformação, gerando mudanças na forma como empresas priorizam suas áreas de negócios. O Relatório Global Tech Trends 2024, em seu 10º ano compartilhando insights do setor de tecnologia, destaca as seis prioridades da TI e três barreiras ao progresso. 

A palavra "Docker" tem várias definições: um projeto da comunidade open source; as ferramentas resultantes desse projeto; a empresa Docker Inc., principal apoiadora do projeto; e as ferramentas compatíveis formalmente com a empresa. O fato da empresa e das tecnologias terem o mesmo nome pode causar alguma confusão.

Veja uma breve explicação:

  • O software de TI "Docker" é uma tecnologia de conteinerização para criação e uso de containers Linux®.
  • A comunidade open source do Docker trabalha gratuitamente para melhorar essas tecnologias para todos os usuários.
  • A empresa Docker Inc. se baseia no trabalho realizado pela comunidade do Docker, tornando-o mais seguro, e compartilha os avanços com a comunidade em geral. Depois, ela oferece aos clientes empresariais o suporte necessário para as tecnologias, que foram aprimoradas e fortalecidas.

Com o Docker, é possível lidar com os containers como se fossem máquinas virtuais modulares e extremamente lightweight. Além disso, os containers oferecem maior flexibilidade para você criar, implantar, copiar e migrar um container de um ambiente para outro. Isso otimiza as apps na nuvem.

Embora isso possa causar confusão, o Docker não é o mesmo que um container Linux tradicional. A tecnologia Docker foi desenvolvida inicialmente com base na tecnologia LXC, que a maioria das pessoas associa aos containers Linux "tradicionais". No entanto, desde então, essa tecnologia tornou-se independente. O LXC era útil como uma virtualização lightweight, mas não oferecia uma boa experiência para usuários e desenvolvedores. A tecnologia Docker oferece mais do que a habilidade de executar containers: ela também facilita o processo de criação e construção de containers, o envio e o controle de versão de imagens, entre outros.

Os containers Linux tradicionais usam um sistema init capaz de gerenciar vários processos. Isso significa que aplicações inteiras são executadas como uma. A tecnologia Docker incentiva a segregação de aplicações em processos separados e oferece as ferramentas para fazer isso. Essa abordagem granular tem algumas vantagens.

Modularidade

A abordagem do Docker para a conteinerização se concentra na habilidade de desativar um pedaço de uma aplicação, seja para reparo ou atualização, sem interrompê-la totalmente. Além dessa abordagem baseada em microsserviços, é possível compartilhar processos entre várias apps da mesma maneira como na arquitetura orientada a serviço (SOA).

Camadas e controle de versão de imagens

Cada arquivo de imagem Docker é composto por uma série de camadas combinadas. Quando a imagem muda, uma camada é criada. Assim como sempre que alguém especificar um comando, como run ou copy.

O Docker reutiliza essas camadas para criar novos containers, o que acelera o processo. Para otimizar a velocidade, o tamanho e a eficiência, ocorrem mudanças intermediárias nas imagens. Algo que também é inerente à criação de camadas no controle de versão: sempre que ocorre uma nova alteração, é gerado um changelog integrado, o que oferece controle total sobre as imagens do container.

Reversão

Talvez a melhor parte da criação de camadas seja a reversão. Toda imagem tem camadas. Não gostou da iteração atual de uma imagem? Basta revertê-la para a versão anterior. Esse processo é compatível com uma abordagem de desenvolvimento ágil e possibilita as práticas de integração e implantação contínuas (CI/CD) em relação às ferramentas.

Implantação rápida

Executar, provisionar e disponibilizar um novo hardware costumava levar dias, um processo muito cansativo. Com os containers Docker, a implantação leva alguns segundos. Crie um container para cada processo para agilizar o compartilhamento desses processos com novas apps. Não é necessário inicializar o sistema operacional para adicionar ou mover um container, o que reduz drasticamente o tempo de implantação. Além disso, é possível criar dados e destruir os criados pelos containers de forma fácil e econômica sem nenhuma preocupação.

Resumindo, a tecnologia Docker é uma abordagem mais granular, controlável e baseada em microsserviços que valoriza a eficiência.

Por si só, o Docker consegue gerenciar containers únicos. Conforme você começa a usar cada vez mais containers e apps em containers, segregados em centenas de partes, pode ser difícil gerenciá-los e orquestrá-los. Eventualmente, será necessário parar um pouco e agrupar os containers para oferecer serviços como rede, segurança, telemetria etc. em todos eles. É aí que o Kubernetes entra em cena.

O Docker não inclui as mesmas funcionalidades parecidas com UNIX que os containers Linux tradicionais oferecem. Isso inclui a capacidade de usar processos como cron ou syslog dentro do container, junto à app. O Docker também tem algumas limitações em questões como a limpeza de processos netos após o encerramento dos processos filhos, algo que é processado naturalmente nos containers Linux tradicionais. Essas desvantagens podem ser mitigadas ao modificar o arquivo de configuração e configurar essas funcionalidades desde o início, o que não está óbvio em um primeiro momento.

Além disso, existem outros dispositivos e subsistemas Linux que não estão em namespaces. Isso inclui dispositivos Selinux, cGroups e /dev/sd*. Em outras palavras, se um invasor adquirir controle sobre esses subsistemas, o host será comprometido. Para manter-se lightweight, o compartilhamento do kernel do host com os containers gera essa possível vulnerabilidade na segurança. Isso é diferente nas máquinas virtuais, as quais são mais firmemente segregadas a partir do sistema host.

O daemon do Docker também pode representar uma vulnerabilidade à segurança. Para usar e executar os containers Docker, é provável que você use o daemon do Docker, um ambiente de execução persistente para containers. O daemon do Docker requer privilégios de raiz. Portanto, é necessário ter um cuidado maior ao escolher as pessoas que terão acesso a esse processo e o local onde ele residirá. Por exemplo, um daemon local tem menos chances de sofrer um ataque do que um daemon em um local mais público, como um servidor web.

Leitura recomendada

ARTIGO

Containers x máquinas virtuais

Os containers Linux e as máquinas virtuais são ambientes de computação empacotados que combinam vários componentes de TI e os isolam do restante do sistema.

ARTIGO

O que é orquestração de containers?

A orquestração automatiza a implantação, o gerenciamento, a escala e a rede dos containers.

ARTIGO

O que é um container Linux?

Um container Linux é um conjunto de processos isolados do sistema. Esses processos são executados a partir de uma imagem distinta que oferece todos os arquivos necessários a eles.

Leia mais sobre containers

Soluções Red Hat

Uma plataforma de aplicações para empresas que oferece serviços testados para lançar aplicações na infraestrutura de sua escolha.

Conteúdo adicional

Datasheet

Red Hat OpenShift: tecnologia de container para nuvem híbrida

O Red Hat® OpenShift® é uma plataforma empresarial de containers Kubernetes que ajuda organizações em todo o mundo a criar, implantar, executar, gerenciar e proteger aplicações inovadoras em nuvens híbridas.

Datasheet

Red Hat OpenShift Kubernetes Engine

O Red Hat OpenShift Kubernetes Engine consiste em vários componentes essenciais e totalmente integrados para criação, implantação e gerenciamento de aplicações em containers.

Ebook

Transforme suas aplicações

Conheça as tendências atuais para a transformação de aplicações e como modernizar sua TI usando serviços em nuvem e plataformas de aplicações em nuvem híbrida.

Treinamentos Red Hat

Treinamento gratuito

Running Containers with Red Hat Technical Overview

Treinamento gratuito

Containers, Kubernetes and Red Hat OpenShift Technical Overview

Treinamento gratuito

Developing Cloud-Native Applications with Microservices Architectures