Como instalar o Docker em uma VPS Ubuntu

Atualizado em 21/09/2026 12 min Iniciante

Quase todo serviço auto-hospedado moderno é distribuído como imagem Docker. Em vez de instalar dependências uma a uma e torcer para nenhuma versão conflitar, você sobe um contêiner com tudo dentro e remove sem deixar rastro quando não quiser mais.

Este guia deixa a VPS pronta para os demais tutoriais: Docker Engine, plugin Compose, firewall configurado e uma limpeza automática para o disco não encher de imagens antigas.

Antes de começar

  • VPS com Ubuntu 22.04 ou 24.04 e acesso root por SSH.
  • Qualquer plano serve para o Docker em si — o que pesa é o serviço que você vai subir depois.

Atualize o sistema

Primeiro acesso numa VPS nova: atualize tudo antes de instalar qualquer coisa.

terminal
apt update && apt upgrade -y
apt install -y curl ca-certificates gnupg

Instale o Docker Engine

O script oficial da Docker detecta a distribuição e instala o Engine com o plugin Compose já incluído. É o caminho recomendado pela própria Docker para servidores.

terminal
curl -fsSL https://get.docker.com | sh

docker --version
docker compose version
systemctl is-enabled docker

Os três comandos precisam responder. O último deve dizer enabled — é o que garante que o Docker volte sozinho depois de um reinício da VPS.

Cuidado com tutoriais que mandam usar docker-compose com hífen. Aquela versão está descontinuada; a atual é o subcomando docker compose, sem hífen.

Crie um usuário sem root para o dia a dia

Trabalhar direto como root é conveniente e arriscado. Crie um usuário comum, coloque-o no grupo docker e passe a usar esse acesso — quem estiver no grupo docker executa contêineres sem precisar de sudo a cada comando.

terminal
adduser --gecos '' deploy
usermod -aG sudo,docker deploy

# copia sua chave SSH para o novo usuário
rsync --archive --chown=deploy:deploy ~/.ssh /home/deploy/

Abra uma segunda conexão SSH como deploy e confirme que entra antes de fechar a sessão como root. Se a chave não tiver sido copiada certo, você fica de fora do servidor.

Feche o firewall

Contêineres publicam portas, e é fácil deixar um banco de dados exposto para a internet sem perceber. Deixe passar só o necessário.

terminal
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable
ufw status numbered

O Docker escreve regras direto no iptables e, em alguns casos, contorna o ufw. Por isso, nos guias deste site os bancos nunca publicam porta para fora: eles conversam com a aplicação pela rede interna do Compose, e só o proxy fica exposto.

Evite que o disco encha

Cada atualização de imagem deixa a anterior ocupando espaço. Numa VPS de 20 GB isso enche o disco em poucos meses. Uma limpeza semanal resolve.

terminal
# veja o quanto está ocupado hoje
docker system df

# limpeza semanal: remove imagens, redes e cache sem uso
(crontab -l 2>/dev/null; echo '0 4 * * 0 /usr/bin/docker system prune -af --volumes=false') | crontab -

Repare no --volumes=false: sem ele, o comando apagaria também os volumes órfãos — e é neles que moram os seus bancos de dados.

Faça um teste

Um contêiner descartável confirma que tudo está no lugar.

terminal
docker run --rm hello-world

# e um teste de Compose
mkdir -p /tmp/teste && cd /tmp/teste
cat > docker-compose.yml <<'EOF'
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
EOF

docker compose up -d
curl -s localhost:8080 | head -5
docker compose down

Se o curl devolveu o HTML de boas-vindas do nginx, a VPS está pronta.

Se algo não funcionar

permission denied ao rodar docker sem sudo

O grupo só passa a valer numa sessão nova. Saia e entre de novo no SSH, ou rode newgrp docker para aplicar na hora.

O disco encheu e os contêineres pararam

Veja o que está ocupando espaço e limpe o que não é volume:

terminal
df -h /
docker system df
docker system prune -af --volumes=false
VPS KVM com acesso root e NVMe

Memória reservada de verdade, sem overselling, e rota nacional a partir de nós no Brasil.

Ver planos de VPS

Perguntas frequentes

Docker consome muita memória por si só?

O daemon em si ocupa algo em torno de 50 a 100 MB. O que consome memória é o que você roda dentro dele — um PostgreSQL, um Node. Na prática o Docker não é o gargalo.

Posso rodar vários serviços diferentes na mesma VPS?

Sim, e é justamente a vantagem. Cada serviço fica isolado no seu contêiner, com as próprias dependências, e um proxy reverso na frente distribui por domínio. O limite é memória e CPU, não conflito de versões.

Qual a diferença entre imagem, contêiner e volume?

A imagem é o molde, somente leitura. O contêiner é uma execução daquele molde — descartável. O volume é onde ficam os dados que precisam sobreviver quando o contêiner é recriado, como o diretório do banco. Atualizar um serviço significa trocar a imagem e recriar o contêiner, mantendo o volume.

Continue por aqui