Por que Docker
Container = servidor + dependências + configs empacotados. Vantagens:
- Setup em 2 min (vs 30 min manual)
- Idêntico entre máquinas (dev vs prod)
- Isolamento (não polui o OS)
- Backup fácil (tudo em volumes)
- Update com 1 comando
- Rollback trivial (versão específica)
Padrão da indústria em 2026. Mesmo grandes provedores (Aternos, Minehut) usam containers por baixo.
itzg/minecraft-server — o padrão
A imagem itzg/minecraft-server é mantida por Geoff Bourne (itzg) desde 2015. 20+ milhões de downloads no Docker Hub. Padrão de facto.
Suporta:
- Vanilla, Paper, Purpur, Spigot, Fabric, Forge, NeoForge
- Bedrock (via imagem separada
itzg/bedrock-server) - Auto-download de versões
- Auto-instalação de plugins/mods
- Health checks
Setup mínimo — docker-compose.yml
services:
mc:
image: itzg/minecraft-server:latest
container_name: mc-paper
restart: unless-stopped
ports:
- "25565:25565"
tty: true
stdin_open: true
environment:
EULA: "TRUE"
TYPE: "PAPER"
VERSION: "1.21.4"
MEMORY: "4G"
MAX_PLAYERS: 30
MOTD: "§6Meu Servidor - Vitt Host"
DIFFICULTY: "normal"
VIEW_DISTANCE: 8
SIMULATION_DISTANCE: 6
ONLINE_MODE: "TRUE"
USE_AIKAR_FLAGS: "TRUE"
volumes:
- ./mc-data:/data
Rodar:
docker compose up -d
docker logs -f mc-paper
Em 2 min: servidor Paper rodando com Aikar flags, na porta 25565, com dados persistentes em ./mc-data/.
Config avançado
Auto-download de plugins
environment:
# ...configs base
MODRINTH_PROJECTS: |
luckperms
essentialsx
coreprotect
worldedit
worldguard
vault
protocollib
placeholderapi
discordsrv
viaversion
itzg baixa automaticamente do Modrinth ao criar container.
Auto-download de Spigot plugins
environment:
SPIGET_RESOURCES: "1997,7749,6245" # ID do plugin no SpigotMC
Auto-baixar mods (Forge/Fabric)
environment:
TYPE: FABRIC
MODRINTH_PROJECTS: |
lithium
starlight
ferritecore
Multi-servidor no mesmo host (Bungee-like)
services:
mc-lobby:
image: itzg/minecraft-server:latest
ports: ["25565:25565"]
environment:
TYPE: PAPER
VERSION: "1.21.4"
MOTD: "Lobby"
volumes: ["./lobby:/data"]
mc-survival:
image: itzg/minecraft-server:latest
ports: ["25566:25565"]
environment:
TYPE: PAPER
VERSION: "1.21.4"
MOTD: "Survival"
volumes: ["./survival:/data"]
bungee:
image: itzg/bungeecord:latest
depends_on: [mc-lobby, mc-survival]
ports: ["25577:25577"]
volumes: ["./bungee:/server"]
Backup dos volumes
# Docker backup fácil
docker compose down
tar czf mc-backup-$(date +%F).tar.gz mc-data/
docker compose up -d
Ou live (sem parar):
docker exec mc-paper mc-send-to-console save-all flush
sleep 5
tar czf mc-backup-$(date +%F).tar.gz mc-data/
Update para nova versão
# Editar docker-compose.yml → VERSION: "1.21.5"
docker compose pull
docker compose up -d
itzg detecta versão nova, baixa, aplica.
Restart automático em crash
Container restart: unless-stopped — se o servidor MC crashar, Docker reinicia. Sem screen/systemd custom.
Console interativo
Ver console MC:
docker attach mc-paper
Sair sem parar: Ctrl+P Ctrl+Q.
Mandar comando sem attach:
docker exec mc-paper mc-send-to-console "say Servidor reinicia em 5min"
Recursos avançados
Health check
itzg tem health check built-in. Ver:
docker inspect --format='{{.State.Health.Status}}' mc-paper
Reduzir imagem (produção)
Use tag específica:
image: itzg/minecraft-server:java21-alpine
~200 MB vs 1 GB da tag latest.
Auto-shutdown quando ninguém joga
environment:
ENABLE_AUTOPAUSE: "TRUE"
AUTOPAUSE_TIMEOUT_EST: 3600 # 1h após último player
AUTOPAUSE_TIMEOUT_KN: 120 # 2min após último kick
Economiza CPU quando servidor sozinho.
Bedrock server
services:
bedrock:
image: itzg/bedrock-server
container_name: bedrock
restart: unless-stopped
ports:
- "19132:19132/udp"
environment:
EULA: "TRUE"
GAMEMODE: survival
DIFFICULTY: normal
LEVEL_NAME: "Bedrock World"
SERVER_NAME: "Bedrock Server"
volumes:
- ./bedrock-data:/data
Vantagens vs setup manual
| Critério | Docker | Manual |
|---|---|---|
| Setup tempo | 2 min | 30-60 min |
| Update version | 1 comando | Baixar+parar+trocar |
| Multi-server | Fácil | Trabalhoso |
| Backup | tar do volume | Configurar cron |
| Rollback | Trocar tag | Manter backup .jar |
| Isolamento | ✅ | ❌ (compartilha OS) |
| Reproducibilidade | ✅ | ⚠️ |
Perguntas frequentes
"Docker consome muita RAM extra?"
Overhead Docker ~50-100 MB. Negligível.
"Player nota diferença?"
Zero. Servidor roda idêntico ao manual.
"E performance? Docker é slower?"
Não. Docker usa cgroups do kernel — overhead <2%. Alguns até argumentam que é mais rápido por menos I/O overhead.
"Volume Docker vs bind mount?"
Bind mount (./mc-data:/data) é mais fácil pra backup. Named volume (mc-data:/data) é mais performático em alguns sistemas.
Conclusão
Docker Compose é o jeito moderno de rodar server MC. Curva mínima (1 arquivo YAML), enorme vantagem em manutenção.
Nossos VPS-BR vêm com Docker Compose pré-instalado nas imagens Ubuntu 22.04.

