Servidores de Jogos

Docker Compose para servidor Minecraft: setup moderno e portável

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.

Links

Compartilhar:

Pronto para hospedar seu próximo projeto?

VPS com painel pré-instalado em 1 clique. Ativação imediata.

Ver planos VPS
⏰ 20% OFF em VPS-BR --:--:-- Ver oferta →