Material educativo sobre Docker e ecossistema de…
INEMA
🐍 Alternativas no ecossistema Python⌗
🔹 Ambientes Virtuais (mais comum)⌗
-
venv (nativo do Python) 👉 Isola dependências por projeto
-
virtualenv 👉 Versão mais completa do venv
🔹 Gerenciadores de dependência⌗
-
pip 👉 Padrão do Python
-
Poetry 👉 Dependências + versionamento + ambiente virtual
-
Pipenv 👉 pip + virtualenv juntos
🔹 Distribuições completas⌗
- Conda / Miniconda 👉 Python + libs científicas (muito usado em dados/IA)
🔹 Execução isolada (sem Docker)⌗
-
PyInstaller 👉 Gera executável do app Python
-
pex 👉 Empacota app Python em um único arquivo
🔹 Plataformas de deploy⌗
- Heroku
- Railway / Render 👉 Deploy sem gerenciar ambiente
📌 Resumo rápido⌗
- Só isolar dependências → venv / Poetry
- Projetos organizados → Poetry
- Dados / IA → Conda
- App distribuído → PyInstaller
- Deploy simples → Railway / Render
- Tudo isolado e reproduzível → Docker (ainda o mais completo)
Aqui estão as principais alternativas ao Docker, de forma simples e direta 👇
🔹 Conteinerização (alternativas diretas)⌗
-
Podman 👉 Similar ao Docker, mais seguro (não precisa de daemon)
-
containerd 👉 Motor de containers usado internamente por Docker e Kubernetes
-
CRI-O 👉 Focado em Kubernetes, leve e eficiente
🔹 Orquestração (substitui Docker Compose em escala)⌗
-
Kubernetes (K8s) 👉 Gerencia muitos containers em produção
-
Docker Swarm 👉 Orquestração simples, nativa do Docker
-
Nomad (HashiCorp) 👉 Alternativa mais simples ao Kubernetes
🔹 Máquinas Virtuais (não usa containers)⌗
-
VirtualBox 👉 VMs locais para testes
-
VMware 👉 VMs profissionais e corporativas
-
KVM 👉 Virtualização nativa do Linux
🔹 Plataformas prontas (menos configuração)⌗
-
Heroku 👉 Deploy fácil, sem gerenciar containers
-
Railway / Render 👉 Alternativas modernas ao Heroku
📌 Resumo rápido⌗
- Quer algo igual ao Docker → Podman
- Usa Kubernetes → containerd / CRI-O
- Produção grande → Kubernetes / Nomad
- Não quer container → VMs
- Quer simplicidade total → Heroku / Railway
🐳 O que é Docker Compose?⌗
Docker Compose é uma ferramenta do Docker usada para definir, configurar e rodar múltiplos containers ao mesmo tempo, usando um único arquivo (docker-compose.yml).
👉 Em vez de rodar vários comandos docker run, você descreve tudo em um arquivo e sobe o sistema com um comando só.
🎯 Para que serve o Docker Compose?⌗
Ele serve para:
- 🔗 Conectar vários serviços (app, banco, cache, fila etc.)
- ⚙️ Padronizar o ambiente de desenvolvimento e testes
- 🚀 Subir todo o sistema de uma vez
- 🧠 Facilitar projetos com mais de um container
🤔 Quando usar Docker Compose?⌗
Use Docker Compose quando seu projeto tem:
- ✅ Aplicação + banco de dados
- ✅ API + frontend
- ✅ Backend + Redis / RabbitMQ
- ✅ Microserviços
-
✅ Ambiente de desenvolvimento local completo
-
👉 Muito comum em desenvolvimento.
- 👉 Em produção, às vezes é substituído por Kubernetes, mas não é obrigatório.
📄 O arquivo docker-compose.yml⌗
É o coração do Docker Compose. Nele você descreve quais serviços existem e como eles se conectam.
Exemplo simples: App + Banco⌗
```version: "3.8"
services: app: build: . ports: - "3000:3000" depends_on: - db
db: image: postgres:15 environment: POSTGRES_USER: admin POSTGRES_PASSWORD: admin POSTGRES_DB: sistema```
▶️ Como usar na prática⌗
Subir tudo⌗
docker-compose up
Subir em segundo plano⌗
docker-compose up -d
Parar tudo⌗
docker-compose down
🧠 Conceitos importantes⌗
🔹 services⌗
Cada container (app, banco, cache).
🔹 build⌗
Indica que o serviço usa um Dockerfile.
🔹 image⌗
Usa uma imagem pronta do Docker Hub.
🔹 ports⌗
Mapeia portas (ex: 3000:3000).
🔹 depends_on⌗
Define a ordem de inicialização.
🆚 Docker vs Docker Compose⌗
| Docker | Docker Compose |
|---|---|
| Um container por vez | Vários containers |
docker run |
docker-compose up |
| Configuração manual | Tudo em um arquivo |
| Mais verboso | Mais simples |
📌 Resumo rápido⌗
- Docker → cria e roda containers
- Docker Compose → orquestra vários containers
- Usa um arquivo YAML
- Ideal para projetos completos
- Muito usado em desenvolvimento
Docker é uma plataforma de conteinerização. Em termos simples: ele permite empacotar uma aplicação com tudo o que ela precisa para rodar (código, dependências, bibliotecas, configurações) e executá-la de forma padronizada em qualquer ambiente.
📦 O que é Docker (em uma frase)⌗
“Funciona na minha máquina” deixa de ser um problema.
🎯 Qual a finalidade do Docker?⌗
- Padronizar ambientes
-
O mesmo container roda no notebook do dev, no servidor de testes e em produção. 2. Isolar aplicações
-
Cada app roda separado, sem conflitos de versões (ex: Python 3.8 vs 3.11). 3. Facilitar deploy
-
Subir a aplicação vira algo como:
docker run. 4. Escalabilidade -
Fácil criar várias instâncias da mesma aplicação. 5. Reprodutibilidade
-
Qualquer pessoa consegue rodar o projeto do zero.
🤔 Quando usar Docker?⌗
Use Docker quando:
- ✅ Você trabalha com desenvolvimento de software
- ✅ O projeto tem muitas dependências
- ✅ Vários devs precisam do mesmo ambiente
- ✅ A aplicação será implantada em servidores ou cloud
- ✅ Você usa microserviços
- ✅ Quer evitar “configurar tudo na máquina”
Exemplos comuns⌗
- Backend (Node, Python, Java, PHP)
- APIs
- Bancos de dados (Postgres, MySQL, Mongo)
- Frontend (React, Angular, Vue)
- Ferramentas de CI/CD
❌ Quando geralmente NÃO usar?⌗
🚫 Scripts simples⌗
- 🚫 Programas muito pequenos e isolados
- 🚫 Ambientes onde Docker não é permitido
- 🚫 Quando o custo de aprendizado não compensa
🧠 Conceitos principais⌗
🧱 Imagem⌗
É o molde do container. Ex: “Node.js + minha aplicação”.
📦 Container⌗
É a imagem em execução.
📄 Dockerfile⌗
Arquivo que descreve como construir a imagem.
📚 Docker Hub⌗
Repositório de imagens prontas (ex: postgres, nginx, python).
🛠️ Como usar Docker (passo a passo simples)⌗
1️⃣ Instalar Docker⌗
- Windows / Mac: Docker Desktop
- Linux: Docker Engine
2️⃣ Criar um Dockerfile (exemplo simples – Node.js)⌗
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
3️⃣ Criar a imagem⌗
docker build -t minha-app .
4️⃣ Rodar o container⌗
docker run -p 3000:3000 minha-app
Pronto 🎉 A aplicação está rodando dentro de um container.
🧩 Docker Compose (quando há vários serviços)⌗
Usado quando o sistema tem:
- App + banco de dados
- API + cache (Redis)
- Vários microserviços
Exemplo simples:
version: "3"
services:
app:
build: .
ports:
- "3000:3000"
db:
image: postgres
Executar:
docker-compose up
🆚 Docker x Máquina Virtual⌗
| Docker | Máquina Virtual |
|---|---|
| Leve | Pesada |
| Inicia rápido | Inicia lento |
| Compartilha SO | SO completo |
| Ideal para apps | Ideal para sistemas |
📌 Resumo rápido⌗
- Docker = empacotar e rodar aplicações de forma consistente
- Usa-se para desenvolvimento, testes e produção
- Resolve conflitos de ambiente
- Facilita deploy e escalabilidade
Docker Como Funciona
1