Passo a passo para instalar Docker no Ubuntu e no Debian pelo repositório oficial, com Docker Compose, rotação de logs e uso sem sudo.
Para que serve
Este artigo mostra como instalar Docker no Ubuntu e no Debian (Docker Engine e o plugin Docker Compose) a partir do repositório oficial da Docker, que é a forma recomendada para servidores. Os pacotes docker.io e docker-compose das distribuições costumam vir defasados, e o script de conveniência (get.docker.com) não é indicado para produção porque instala dependências sem perguntar e pode fazer saltos de versão inesperados.
Você pode seguir este roteiro direto no servidor dedicado ou, o que é mais comum em quem usa Proxmox VE, dentro de uma VM Debian ou Ubuntu criada para rodar containers.
Pré-requisitos
- Debian 12 (Bookworm) ou 13 (Trixie), ou Ubuntu 22.04, 24.04 ou 26.04 LTS, 64 bits.
- Acesso root ou usuário com
sudo. - Saída para a internet (HTTPS) para baixar os pacotes.
Passo a passo para instalar Docker no Ubuntu e no Debian
- Remova pacotes antigos ou conflitantes (se existirem; o apt avisa se não houver nada para remover):
Imagens e volumes que estejam emfor pkg in docker.io docker-doc docker-compose docker-buildx podman-docker containerd runc; do sudo apt remove -y $pkg done/var/lib/dockernão são apagados por esse comando. - Instale as dependências e a chave GPG da Docker. No Debian:
No Ubuntu, troquesudo apt update sudo apt install -y ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asclinux/debianporlinux/ubuntuna URL. - Cadastre o repositório (formato deb822). No Debian:
No Ubuntu, usesudo tee /etc/apt/sources.list.d/docker.sources <<EOF Types: deb URIs: https://download.docker.com/linux/debian Suites: $(. /etc/os-release && echo "$VERSION_CODENAME") Components: stable Architectures: $(dpkg --print-architecture) Signed-By: /etc/apt/keyrings/docker.asc EOF sudo apt updateURIs: https://download.docker.com/linux/ubuntu. Se oapt updatereclamar de "Conflicting values set for option Signed-By", existe outro arquivo antigo da Docker em/etc/apt/sources.list.d/(por exemplodocker.list); apague-o e rode de novo. - Instale o Docker Engine e os plugins:
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - Habilite o serviço na inicialização (no Debian/Ubuntu ele já vem habilitado, mas confirme):
sudo systemctl enable --now docker containerd - Configure rotação de logs. Por padrão os logs dos containers crescem sem limite e podem lotar o SSD do sistema. Crie
/etc/docker/daemon.json:
Depois:{ "log-driver": "local", "log-opts": { "max-size": "20m", "max-file": "5" } }sudo systemctl restart docker. A configuração vale para containers criados a partir de agora; os existentes precisam ser recriados (docker compose up -d --force-recreate). - (Opcional) Use o Docker sem sudo. Adicione seu usuário ao grupo
dockere faça logout/login:
Atenção: quem está no gruposudo usermod -aG docker $USERdockertem, na prática, poder de root no servidor. Só adicione usuários de confiança.
Seu primeiro projeto com Docker Compose
O Compose agora é um plugin: o comando é docker compose (com espaço), e não mais docker-compose. Exemplo de um Nginx publicado apenas no localhost (para ficar atrás de um proxy reverso):
mkdir -p ~/apps/web && cd ~/apps/web
cat > compose.yaml <<'EOF'
services:
web:
image: nginx:1.27-alpine
restart: unless-stopped
ports:
- "127.0.0.1:8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro
EOF
mkdir -p html && echo "ok" > html/index.html
docker compose up -d
Comandos do dia a dia: docker compose ps, docker compose logs -f, docker compose down (para e remove os containers, mas mantém volumes nomeados) e docker compose pull (baixa imagens novas).
Como saber se funcionou
docker version
docker compose version
sudo docker run --rm hello-world
curl -s http://127.0.0.1:8080
O hello-world deve imprimir uma mensagem de boas-vindas e o curl deve devolver ok. Para conferir a política de logs: docker info --format '{{.LoggingDriver}}' deve mostrar local.
Problemas comuns
- "permission denied while trying to connect to the Docker daemon socket": você não está no grupo
dockerou ainda não refez o login. Usesudoou rodenewgrp docker. - "docker-compose: command not found": o comando novo é
docker compose. Scripts antigos podem ser ajustados ou receber um alias. - Conflito de rede com sua LAN/VPN: o Docker usa faixas de
172.17.0.0/16em diante. Se sua VPN ou rede interna usa 172.16–172.31, defina outra faixa emdaemon.jsoncom"default-address-pools": [{"base": "10.200.0.0/16", "size": 24}]e reinicie o Docker. - Disco cheio em
/var/lib/docker: veja o consumo comdocker system dfe limpe imagens sem uso comdocker image prune -a(confira antes o que será removido). Em servidores com NVMe separado, vale mover odata-rootpara o volume maior. - Docker dentro de LXC no Proxmox falhando com "ip_unprivileged_port_start ... permission denied": é uma incompatibilidade entre versões recentes do containerd e LXC não privilegiado. Atualize o Proxmox VE para 9.1 ou superior ou, melhor, rode o Docker numa VM.
Perguntas frequentes
Qual a diferença entre docker-compose e docker compose?
O docker-compose (com hífen) é a versão antiga, escrita em Python e descontinuada. O docker compose (com espaço) é o plugin atual, instalado com o pacote docker-compose-plugin, e lê os mesmos arquivos compose.yaml.
Posso instalar o Docker com apt install docker.io?
Funciona, mas o pacote da distribuição costuma estar defasado. Para servidores, prefira o repositório oficial da Docker, como mostrado neste artigo.
Posso instalar o Docker direto no host Proxmox?
Não é recomendado: o Docker altera o iptables e a rede do host e pode conflitar com o firewall e as bridges do Proxmox. Rode-o em uma VM Debian ou Ubuntu. Veja também o artigo «LXC ou VM no Proxmox: qual a diferença e quando usar cada um» e, para segurança das imagens, «Segurança em containers: imagens mínimas, usuário não-root, Trivy e secrets (Docker e Kubernetes)».
Como atualizar o Docker depois de instalado?
Como ele vem de um repositório apt, basta sudo apt update && sudo apt upgrade. Os containers são reiniciados quando o serviço reinicia, então faça isso em janela de manutenção.
Leitura complementar
Precisa de ajuda? Abra um ticket na Área do Cliente ou fale com o suporte pelo WhatsApp. Lembre-se de que, sem o serviço de Gerenciamento contratado, a administração do sistema e dos containers é de responsabilidade do cliente.
