Aula 07 - Containers e Virtualização 🐳
Objetivo
Objetivo: Entender o que são containers, como eles se diferenciam das Máquinas Virtuais (VMs) tradicionais e por que eles se tornaram o padrão da indústria para Deploy de aplicações.
1. O Problema: "Na minha máquina funciona!" 🤷♂️
Um dos maiores desafios do desenvolvimento é garantir que o software rode da mesma forma no computador do desenvolvedor e no servidor de produção. Diferenças de sistema operacional, bibliotecas e versões causam erros inesperados.
A Conteinerização resolve isso empacotando a aplicação com tudo o que ela precisa para rodar.
2. Containers vs Máquinas Virtuais (VMs) ⚔️
Antigamente, usávamos VMs para isolar aplicações. Mas as VMs são pesadas.
| Característica | Máquina Virtual (VM) | Container (Docker) |
|---|---|---|
| Peso | Pesada (Gigas) | Leve (Megas) |
| Velocidade | Minutos para ligar | Segundos para ligar |
| Isolamento | Completo (Hardware virtual) | Processos isolados no SO |
| Sistema Operacional | Possui um SO completo dentro | Compartilha o Kernel do Host |
Estrutura de Container vs VM
graph TD
subgraph VM["Máquina Virtual (VM)"]
APP1["App"] --> LIB1["Biliotecas"]
LIB1 --> OS1["SO Convidado"]
OS1 --> HYP["Hipervisor"]
end
subgraph CT["Container (Docker)"]
APP2["App"] --> LIB2["Bibliotecas"]
LIB2 --> DE["Docker Engine"]
DE --> OS2["SO Host (Kernel)"]
end
Rodando seu primeiro Container (Termynal) 💻
docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world Digest: sha256:d37adae... Status: Downloaded newer image for hello-world:latest Hello from Docker! 🐳
3. O que é um Container? 📦
Pense em um container como uma "caixa" que contém: * O código da sua aplicação. * O runtime (ex: Node.js, Python, Java). * As bibliotecas dependentes. * Variáveis de ambiente e arquivos de configuração.
Tudo o que está dentro da caixa é imutável e portável. Se rodar no seu PC, vai rodar igual em qualquer lugar que tenha Docker.
4. Como funciona o Docker? 🏗️
O Docker é a ferramenta que popularizou os containers. Ele trabalha com três conceitos básicos:
- Dockerfile: A "receita do bolo". Um arquivo de texto com as instruções para criar a imagem.
- Imagem: O "bolo pronto e congelado". É o arquivo que contém a aplicação pronta para rodar.
- Container: O "bolo sendo servido". É a imagem em execução (um processo vivo).
5. Benefícios para o DevOps 💎
- Padronização: O ambiente é o mesmo em Dev, Teste e Prod.
- Escalabilidade: Você pode subir 100 containers em segundos se o tráfego aumentar.
- Eficiência: Mais aplicações rodando no mesmo hardware comparado a VMs.
- Microserviços: Facilita a divisão de uma aplicação grande em partes menores e independentes.
6. Exercício de Fixação 🧠
- Por que os containers são considerados mais eficientes que as Máquinas Virtuais?
- O que significa dizer que um container é "portável"?
- Qual a função do Dockerfile no processo de criação de um container?
Próxima Aula: Vamos colocar a mão na massa e criar nosso primeiro container! Docker na Prática 🚀