top of page

Entendendo o Docker: O poder dos contêineres versus máquinas virtuais

O desenvolvimento e a implantação de software evoluíram rapidamente na última década. Uma das mudanças mais significativas foi a ascensão da tecnologia de contêineres, com o Docker na vanguarda. Os contêineres transformaram a maneira como os desenvolvedores criam, distribuem e executam aplicativos, oferecendo uma alternativa leve às máquinas virtuais (VMs) tradicionais. Este artigo explora o que é o Docker, por que os contêineres são amplamente utilizados, compara contêineres com VMs e explica como criar e implantar imagens Docker usando pipelines de CI/CD em um cluster Kubernetes.



Visão ao nível dos olhos da tela de um computador exibindo um diagrama da arquitetura de um contêiner Docker.


O que é Docker e por que os contêineres são populares?

O Docker é uma plataforma de código aberto que automatiza a implantação de aplicações dentro de contêineres leves e portáteis. Um contêiner Docker empacota uma aplicação e todas as suas dependências, bibliotecas e arquivos de configuração em uma única unidade que pode ser executada de forma consistente em diferentes ambientes computacionais.


Por que os recipientes são amplamente utilizados?


  • Portabilidade: Os contêineres funcionam da mesma maneira em qualquer sistema com o Docker instalado, seja no laptop de um desenvolvedor, em um servidor de testes ou em um ambiente de nuvem.

  • Eficiência: Os contêineres compartilham o kernel do sistema operacional hospedeiro, tornando-os muito mais leves e rápidos de iniciar do que as máquinas virtuais.

  • Consistência: Os desenvolvedores podem ter certeza de que o aplicativo se comporta da mesma maneira em desenvolvimento, teste e produção.

  • Isolamento: Os contêineres isolam os aplicativos uns dos outros, evitando conflitos entre dependências.

  • Escalabilidade: Os contêineres podem ser facilmente replicados e orquestrados, tornando-os ideais para microsserviços e aplicações nativas da nuvem.


Esses benefícios fizeram dos contêineres Docker uma ferramenta padrão para o desenvolvimento e implantação de software moderno.


Comparando contêineres Docker e máquinas virtuais

Tanto os contêineres Docker quanto as máquinas virtuais fornecem ambientes isolados para a execução de aplicativos, mas fazem isso de maneiras fundamentalmente diferentes.

Aspecto

Contêineres Docker

Máquinas Virtuais

Arquitetura

Compartilhe o kernel do sistema operacional host, execute espaços de usuário isolados.

Execute o sistema operacional convidado completo em hardware virtualizado.

Tamanho

Leve, geralmente com tamanho em megabytes.

Maior, geralmente com vários gigabytes.

Hora de inicialização

Segundos ou menos

Minutos

Utilização de recursos

Baixo, compartilha recursos do sistema operacional

Alto nível de exigência, requer recursos dedicados do sistema operacional.

Nível de isolamento

Isolamento em nível de processo

Isolamento mais robusto com sistema operacional separado.

Portabilidade

Altamente portátil entre sistemas com Docker.

Portátil, mas requer um hipervisor compatível.

Casos de uso

Microsserviços, implantação rápida, pipelines de CI/CD

Executando vários tipos de sistemas operacionais e aplicativos legados.


Vantagens dos contêineres Docker em relação às máquinas virtuais


  • Inicialização e encerramento mais rápidos: os contêineres são iniciados quase instantaneamente.

  • Menor consumo de recursos: os contêineres utilizam menos CPU, memória e armazenamento.

  • Gestão simplificada: Mais fácil criar, distribuir e atualizar aplicações.

  • Melhor para microsserviços: os contêineres se adaptam bem a serviços pequenos e modulares.


Desvantagens dos contêineres Docker


  • Isolamento mais fraco: os contêineres compartilham o kernel do sistema operacional host, o que pode representar riscos de segurança.

  • Suporte limitado a sistemas operacionais: os contêineres geralmente executam contêineres Linux ou Windows em hosts compatíveis.

  • Menos adequado para executar vários tipos de sistemas operacionais: as máquinas virtuais podem executar diferentes sistemas operacionais no mesmo hardware.


Criando uma imagem Docker

Criar uma imagem Docker é o primeiro passo para empacotar sua aplicação em um contêiner. Uma imagem Docker contém tudo o que é necessário para executar a aplicação: código, ambiente de execução, bibliotecas e variáveis de ambiente.


Passos para criar uma imagem Docker


  1. Crie um Dockerfile: Este arquivo de texto contém instruções para montar a imagem. Ele especifica a imagem base, copia arquivos, instala dependências e define o comando de inicialização.


Exemplo de Dockerfile para um aplicativo Node.js:

   -->dockerfile
   FROM node:16-alpine
   WORKDIR /app
   COPY package.json .
   RUN npm install
   COPY . .
   CMD ["node", "index.js"]

Construa a imagem: Use o comando da CLI do Docker para construir a imagem a partir do Dockerfile.

-->bash
docker build -t my-node-app:latest .

Teste a imagem localmente: Execute o contêiner para verificar se ele funciona.

-->bash
docker run -p 3000:3000 my-node-app:latest

Envie a imagem para um registro: Faça o upload da imagem para um registro de contêineres como o Docker Hub ou um registro privado.

-->bash
docker tag my-node-app:latest myrepo/my-node-app:latest
docker push myrepo/my-node-app:latest

Implantação de imagens Docker usando CI/CD no Kubernetes

O Kubernetes é uma plataforma popular de orquestração de contêineres que automatiza a implantação, o escalonamento e o gerenciamento de aplicativos em contêineres. A integração do Docker com o Kubernetes e pipelines de CI/CD agiliza a entrega de software.


Visão geral do processo de implantação


  1. Integração Contínua (CI): Os desenvolvedores enviam as alterações de código para um sistema de controle de versão (por exemplo, Git ). Um servidor de CI (como Jenkins, GitLab CI ou GitHub Actions ) cria automaticamente a imagem Docker, executa testes e envia a imagem para um registro.


  2. Implantação Contínua (CD): Assim que a imagem estiver no registro, o pipeline de CD atualiza o cluster Kubernetes para usar a nova versão da imagem.


Passos detalhados


  • Configure um pipeline de CI:

- Configure o pipeline para ser acionado por commits de código.

- Incluir etapas para construir a imagem Docker e executar testes unitários e de integração.

- Envie a imagem testada para um registro de contêineres.


  • Preparar os manifestos do Kubernetes:

- Defina os arquivos YAML de implantação, especificando a imagem do contêiner, as réplicas, as portas e as variáveis de ambiente.


- Exemplo de trecho de código para implantação:

-->yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-node-app
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: my-node-app
      template:
        metadata:
          labels:
            app: my-node-app
        spec:
          containers:
          - name: node-container
            image: myrepo/my-node-app:latest
            ports:
            - containerPort: 3000

Automatize a implantação com ferramentas de CD:

  • Utilize ferramentas como Argo CD, Flux ou comandos nativos do Kubernetes no pipeline.

- O pipeline aplica os manifestos atualizados ao cluster, acionando atualizações contínuas.


Monitorar e reverter:

  • Monitore a integridade do aplicativo usando sondas e registros do Kubernetes.

- Reverter para versões anteriores caso surjam problemas.



Visão de cima do painel de controle do cluster Kubernetes, mostrando os pods e implantações dos contêineres.


Exemplo prático: do código ao Kubernetes

Imagine uma equipe desenvolvendo um aplicativo web. Eles usam o GitHub para controle de versão e o GitHub Actions para CI/CD.


  • Quando um desenvolvedor envia código, o GitHub Actions cria uma imagem Docker.

  • O pipeline executa testes dentro do contêiner.

  • Se os testes forem aprovados, a imagem é enviada para o Docker Hub.

  • Em seguida, o pipeline atualiza o manifesto de implantação do Kubernetes com a nova tag de imagem.

  • Por fim, o pipeline aplica o manifesto ao cluster Kubernetes, implementando a nova versão sem tempo de inatividade.


Esse processo reduz etapas manuais, acelera as implementações e garante consistência entre os ambientes.


Resumo

Os contêineres Docker oferecem uma maneira leve e portátil de empacotar e executar aplicativos. Comparados às máquinas virtuais, os contêineres iniciam mais rapidamente e usam menos recursos, tornando-os ideais para fluxos de trabalho de desenvolvimento modernos e microsserviços. No entanto, os contêineres oferecem menos isolamento e dependem do kernel do sistema operacional hospedeiro.


A criação de imagens Docker envolve a escrita de um Dockerfile, a construção e o teste da imagem e o seu envio para um registro. A implantação dessas imagens em um cluster Kubernetes por meio de pipelines de CI/CD automatiza a entrega e o escalonamento, melhorando a confiabilidade e a velocidade.


bottom of page