🚀 Capítulo 11: Contêineres (Docker) (Tema: Alien)
NOTE
Este capítulo utiliza a temática de Alien para explicar os Contêineres. Isole a sua criatura (aplicação) dentro de uma cápsula e garanta que ela rode perfeitamente em qualquer nave do universo!
1. 🎯 Objetivo da Aula
Compreender o conceito de Contêineres, a diferença entre Máquinas Virtuais e Contêineres, e como o Docker facilita o empacotamento e a distribuição de aplicações.
2. 🏢 O Cenário Prático (Seu Desafio)
No filme Alien, a tripulação da nave Nostromo precisa lidar com uma criatura perigosa. A melhor estratégia é isolá-la em uma cápsula de quarentena.
- A cápsula tem tudo o que a criatura precisa para sobreviver ali dentro (ar, espaço).
- Ela está totalmente isolada do resto da nave.
- Você pode mover a cápsula para outra nave menor, e a criatura continuará vivendo lá dentro do mesmo jeito.
No mundo do desenvolvimento, nós sofremos com o problema: “Na minha máquina funciona, mas no servidor não funciona”. Isso acontece porque o seu computador tem uma versão do Python, do Node ou do banco de dados, e o servidor tem outra. O Docker resolve isso criando uma “cápsula” (o Contêiner) onde colocamos o nosso código junto com TUDO o que ele precisa para rodar. Se funciona no seu computador dentro do contêiner, vai funcionar no servidor do mesmo jeito! Seu desafio é empacotar sua aplicação!
🧠 Fundamentos: A Teoria Traduzida
Um Contêiner é uma unidade padrão de software que empacota o código e todas as suas dependências para que a aplicação seja executada de forma rápida e confiável em diferentes ambientes de computação.
⚖️ Máquina Virtual vs Contêiner:
- Máquina Virtual (VM):
- É pesada (pesa Gigabytes).
- Simula um computador físico inteiro, incluindo um Sistema Operacional completo para cada VM.
- Demora minutos para ligar.
- Contêiner (Docker):
- É leve (pesa Megabytes).
- Não simula o hardware. Ele compartilha o mesmo “coração” (Kernel) do sistema operacional do computador hospedeiro.
- Liga em segundos!
4. 📖 Exemplo Guiado: O Arquivo de Receita (Dockerfile)
Para criar um contêiner, nós escrevemos um arquivo de texto chamado Dockerfile. Ele é a “receita do bolo” de como montar a cápsula da nossa aplicação.
# 1. Use uma imagem base do Node.js
FROM node:18
# 2. Crie uma pasta dentro do contêiner para o código
WORKDIR /app
# 3. Copie os arquivos do seu computador para dentro do contêiner
COPY . .
# 4. Instale as bibliotecas
RUN npm install
# 5. Diga qual comando o contêiner deve rodar ao ligar
CMD ["node", "servidor.js"]Com esse arquivo, qualquer pessoa no mundo pode rodar o comando docker build e terá uma réplica exata do seu ambiente de trabalho!
5. 🛠️ Prática Obrigatória 1: Vantagens do Docker
Com base na comparação entre VMs e Contêineres:
- Por que uma empresa preferiria rodar 50 contêineres Docker em um servidor em vez de 50 Máquinas Virtuais? (Pense em recursos como memória e processamento).
- O que significa a frase “Funciona na minha máquina” e como o Docker resolve esse problema clássico da TI?
6. 🛠️ Prática Obrigatória 2: Imagens e Contêineres
No mundo Docker, existe uma diferença entre Imagem e Contêiner:
- A Imagem é o arquivo parado, a receita do bolo gravada no disco.
- O Contêiner é a imagem em execução, o bolo assado e pronto para comer.
- Se você tem a imagem de um site salva no seu computador, você pode criar 3 contêineres (3 sites rodando ao mesmo tempo) usando essa mesma única imagem?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 11 DevOps) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
mod_13_devops_e_cloud/
├── capitulos/
│ ├── capitulo_11_docker.md
│ └── codigos/
│ └── cap11/
│ └── Dockerfile💡 Checkpoint de Lógica
O Docker revolucionou a TI porque permitiu que desenvolvedores e equipe de infraestrutura falassem a mesma língua: a língua dos contêineres!
10. 🔥 Desafio de Fixação
Pesquise o que é o Docker Hub e para que ele serve (Dica: Pense em um GitHub, mas para imagens de contêineres).
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- Porque os contêineres são muito mais leves e compartilham o sistema operacional. Rodar 50 VMs exigiria 50 cópias do Windows/Linux na memória, o que travaria o servidor. 50 contêineres rodam tranquilamente usando uma fração da memória.
- Significa que o código funciona no computador do programador, mas dá erro no servidor por diferença de configurações. O Docker resolve isso garantindo que o ambiente do programador e do servidor sejam exatamente iguais dentro da cápsula. Gabarito da Prática 2:
- Sim! Você pode criar quantos contêineres quiser a partir de uma única imagem base.