https://1drv.ms/p/s!AjRIT37CdPNxgcxxMpJ0mEQiLVpqJw?e=UcoFWz

Título

Funciona só na sua máquina? Uma visão geral sobre containers, do desenvolvimento à produção (Docker, Dev Containers, Testcontainers, Kubernetes e tudo mais).

Descrição

Nesta apresentação abordo o universo dos containers! Trago um histórico de como a proposta de uma tecnologia como a LXC, que existe há anos, se tornou o Padrão da Indústria e o Estado da Arte desde o desenvolvimento até a produção. Como containers rodam por baixo dos panos no Linux, até ferramentas baseadas em containers que são verdadeiras aliadas no dia a dia da pessoa desenvolvedora. Containers com foco em desenvolvimento ao invés de infraestrutura.

Desenvolvimento

Como era antes

Antes da popularização dos containers, as aplicações eram geralmente executadas em ambientes tradicionais, como máquinas físicas ou máquinas virtuais (VMs). Aqui estão algumas características desses ambientes pré-containerização:

  1. Máquinas físicas: Antes dos avanços em virtualização e containerização, as aplicações eram executadas diretamente em servidores físicos dedicados. Cada aplicação ou conjunto de aplicações ocupava um servidor separado, resultando em um uso subótimo dos recursos de hardware.
  2. Máquinas virtuais (VMs): A virtualização foi um grande avanço antes dos containers. Com VMs, é possível criar ambientes isolados em um único servidor físico. Cada VM contém seu próprio sistema operacional completo, permitindo que múltiplas aplicações sejam executadas em uma única máquina física. No entanto, as VMs ainda carregam consigo um overhead significativo de recursos, pois cada uma delas inclui uma pilha de sistema operacional completo.
  3. Ambientes de desenvolvimento locais: Para desenvolvimento e teste de software, os desenvolvedores muitas vezes dependiam de ambientes locais em suas próprias máquinas. Isso podia levar a inconsistências entre os ambientes de desenvolvimento, teste e produção, já que as configurações de software poderiam diferir entre os sistemas.
  4. Desafios de implantação e escalabilidade: Implantações de software em ambientes tradicionais muitas vezes eram complexas e demoradas. Dimensionar aplicações para lidar com aumentos de tráfego exigia a aquisição, provisionamento e configuração de novos servidores físicos ou VMs, o que era um processo demorado e caro.
  5. Gerenciamento de dependências: Gerenciar as dependências de software de uma aplicação era muitas vezes uma tarefa complicada e propensa a erros. Atualizações de bibliotecas ou configurações de sistema em uma máquina poderiam afetar outras aplicações em execução na mesma máquina.

Em resumo, antes da adoção generalizada de containers, os ambientes de desenvolvimento e implantação de software eram mais estáticos, menos eficientes em termos de recursos e mais propensos a inconsistências e dificuldades de gerenciamento de dependências. Os containers surgiram como uma solução para muitos desses problemas, oferecendo uma abordagem mais leve, portátil e eficiente para executar aplicações em ambientes diversos.