O Docker permite empacotar aplicações e suas dependências em containers portáteis. Isso garante consistência entre desenvolvimento, testes e produção. Este guia reúne o essencial para você começar bem.
1. O que é Docker?
Docker é uma plataforma de containerização. Em vez de uma máquina virtual completa, o container compartilha o kernel do sistema, ficando leve e rápido.
- Portabilidade: funciona igual em qualquer ambiente.
- Consistência: mesmo stack em dev, QA e produção.
- Isolamento: apps não conflitam entre si.
- Eficiência: menor uso de recursos que VMs.
2. Conceitos fundamentais
- Imagem: template somente leitura com app e dependências.
- Container: instância em execução da imagem.
- Dockerfile: receita para construir imagens.
3. Instalação do Docker
Windows e macOS: use o Docker Desktop no site oficial.
Linux (Ubuntu/Debian):
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce
docker --version4. Comandos essenciais
Imagens:
docker pull nginx
docker images
docker rmi nginxContainers:
docker run -d -p 8080:80 nginx
docker ps
docker ps -a
docker stop <container_id>
docker rm <container_id>
docker exec -it <container_id> sh5. Primeiro projeto com Docker (Node.js)
Estrutura:
mkdir meu-primeiro-docker
cd meu-primeiro-dockerpackage.json:
{
"name": "meu-primeiro-docker",
"version": "1.0.0",
"scripts": { "start": "node server.js" },
"dependencies": { "express": "^4.18.0" }
}server.js:
const express = require("express");
const app = express();
const PORT = process.env.PORT || 3000;
app.get("/", (req, res) => {
res.send("<h1>Minha primeira aplicação Docker!</h1>");
});
app.listen(PORT, () => console.log("Rodando na porta " + PORT));Dockerfile:
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]Build e run:
docker build -t minha-app .
docker run -d -p 3000:3000 --name meu-container minha-app
curl http://localhost:3000.dockerignore:
node_modules
npm-debug.log
.git
.DS_Store6. Docker Compose
Para múltiplos serviços, use um docker-compose.yml:
version: "3.8"
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_DB: meuapp
POSTGRES_USER: usuario
POSTGRES_PASSWORD: senha
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:Executar:
docker compose up -d
docker compose down7. Boas práticas
- Prefira imagens oficiais.
- Use
.dockerignorepara reduzir a imagem. - Combine camadas quando possível.
- Use multi-stage builds em projetos grandes.
- Evite rodar como root.
- Defina healthchecks.
Próximos passos
Depois do básico, explore otimização de imagens, CI/CD com Docker e orquestração com Docker Swarm ou Kubernetes.