🚀 Capítulo 17: Mais do que os olhos podem ver (Tema: Transformers)
NOTE
Este capítulo utiliza a temática de Transformers para explicar o Docker e os Contêineres. Empacote a sua aplicação completa para que ela rode em qualquer lugar do universo sem dar erro!
1. 🎯 Objetivo da Aula
Compreender o que é a tecnologia de Contêineres (Docker), para que ela serve no desenvolvimento Full Stack e como ela resolve o clássico problema do “Na minha máquina funciona, mas no servidor não”.
2. 🏢 O Cenário Prático (Seu Desafio)
Os robôs gigantes conhecidos como Transformers possuem uma habilidade incrível: eles conseguem se transformar em carros, caminhões ou aviões para se adaptar a qualquer ambiente e passar despercebidos. Eles carregam tudo o que precisam para funcionar (combustível, armas, cérebro) dentro do próprio corpo. Não importa se eles estão no planeta Cybertron ou na Terra, eles funcionam exatamente da mesma forma!
No desenvolvimento de software, um dos maiores problemas que tiram o sono dos programadores é o famoso: “Na minha máquina funciona perfeitamente, mas quando enviei para o servidor deu erro!“. Isso acontece porque o seu computador de estudos tem versões de programas diferentes do computador do servidor.
- Para resolver isso de forma mágica, nós usamos o Docker!
- Ele empacota a nossa aplicação inteira (código, banco de dados e configurações) dentro de uma “caixa” blindada chamada Contêiner. Seu desafio é criar o seu contêiner!
🧠 Fundamentos: A Teoria Traduzida
🐳 1. O que é o Docker?
O Docker é uma plataforma que permite criar, testar e implantar aplicações rapidamente usando contêineres.
📦 2. O que é um Contêiner?
Imagine que você quer enviar uma casa inteira para outro país. Em vez de desmontar tijolo por tijolo, você coloca a casa inteira montada dentro de um contêiner gigante de navio e envia!
- No software, o contêiner guarda o seu código do Node.js, a versão exata do banco de dados PostgreSQL e todas as bibliotecas que você instalou.
- Se você rodar esse contêiner no Windows, no Mac ou em um servidor Linux na nuvem, o aplicativo vai rodar exatamente igual, sem que você precise instalar nada nesses computadores!
🖼️ 3. Imagem vs Contêiner:
- Imagem (A Planta/Fórmula): É o arquivo de leitura que diz como o contêiner deve ser criado. É a receita do bolo.
- Contêiner (O Bolo Pronto): É a imagem sendo executada de verdade na memória do computador.
4. 📖 Exemplo Guiado: O arquivo Dockerfile
Para criar a nossa imagem do Transformer, nós escrevemos um arquivo de texto simples chamado Dockerfile na raiz do projeto:
# 1. Puxa a imagem oficial do Node.js
FROM node:18
# 2. Cria a pasta do app dentro do contêiner
WORKDIR /usr/src/app
# 3. Copia o nosso código para lá
COPY . .
# 4. Instala as bibliotecas
RUN npm install
# 5. Liga o servidor!
CMD ["node", "servidor.js"]5. 🛠️ Prática Obrigatória 1: Resolvendo o Problema
Um colega de equipe diz que o projeto dele não roda no seu computador porque você tem o Node.js na versão instalado e o projeto dele só funciona na versão .
- Como o uso do Docker e de contêineres resolveria esse problema de incompatibilidade de versões sem que você precise desinstalar o seu Node.js?
6. 🛠️ Prática Obrigatória 2: Imagem ou Contêiner?
Diga se os itens abaixo representam uma Imagem ou um Contêiner do Docker:
- O arquivo que você baixa da internet contendo o “instalador” pronto do banco de dados MongoDB.
- O banco de dados MongoDB rodando de verdade e guardando dados na memória do seu computador.
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 17 FS_Transformers) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
proj_aplicacoes_full_stack/
├── capitulos/
│ └── capitulo_17_transformers.md💡 Checkpoint de Lógica
Muitos projetos Full Stack usam uma ferramenta chamada Docker Compose para ligar o contêiner do Backend e o contêiner do Banco de Dados juntos com um único comando!
10. 🔥 Desafio de Fixação
Pesquise o que significa a sigla VM (Máquina Virtual) e por que os contêineres Docker são considerados muito mais leves do que as Máquinas Virtuais tradicionais.
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- O Docker vai baixar a versão exata do Node.js que o projeto precisa e vai rodar o código dentro do contêiner isolado. O seu computador continuará com o Node.js do lado de fora, sem nenhum conflito! Gabarito da Prática 2:
- Imagem (É a receita/arquivo estático).
- Contêiner (É o processo vivo em execução).