Quem trabalha com desenvolvimento no Windows sabe que o Docker Desktop, por padrão, utiliza o WSL 2 de forma quase invisível — uma distro chamada docker-desktop cuida da engine, enquanto seus containers e volumes se misturam com o resto do sistema. Funciona, mas não é ideal. Com o tempo, esse arranjo gera acúmulo de dados, dificulta o isolamento entre projetos e torna a manutenção mais trabalhosa do que deveria ser. A boa notícia é que existe uma solução elegante: criar uma distribuição WSL dedicada exclusivamente para o Docker, com controle total sobre instalação, atualização, backup e recuperação de espaço em disco.
Assim como um bom arquiteto separa fundações, estrutura e acabamento, um bom desenvolvedor separa os ambientes — e o WSL torna isso mais simples do que parece.
1. Criando a distro WSL dedicada
O primeiro passo é obter uma imagem base do Ubuntu 25.10 (Oracular Oriole). Como ela ainda pode não estar disponível diretamente na Microsoft Store, podemos baixá-la manualmente como rootfs e importar via wsl --import.
Baixe a imagem do Ubuntu Cloud Images:
# No PowerShell, como administrador
mkdir C:\WSL\DockerEnv
# Baixe o rootfs do Ubuntu 25.10
curl -L -o C:\WSL\ubuntu-25.10-base.tar.gz `
https://cloud-images.ubuntu.com/wsl/oracular/current/ubuntu-oracular-wsl-amd64-wsl.rootfs.tar.gz
Com o arquivo em mãos, importe como uma nova distro:
wsl --import DockerEnv C:\WSL\DockerEnv C:\WSL\ubuntu-25.10-base.tar.gz --version 2
Acesse a distro recém-criada:
wsl -d DockerEnv
Configure um usuário não-root para o dia a dia:
useradd -m -s /bin/bash -G sudo seu_usuario
echo "seu_usuario:sua_senha" | chpasswd
echo "seu_usuario ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
Para que o WSL entre com esse usuário por padrão, crie o arquivo /etc/wsl.conf dentro da distro:
cat > /etc/wsl.conf << EOF
[user]
default=seu_usuario
[boot]
systemd=true
EOF
Reinicie a distro para aplicar:
wsl --terminate DockerEnv
wsl -d DockerEnv
2. Mantendo o Ubuntu atualizado
Com o ambiente rodando, a primeira ação deve ser sempre garantir que o sistema base está atualizado. No Ubuntu 25.10, o gerenciador de pacotes é o apt, e o ciclo de atualização recomendado é:
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo apt clean
apt update— sincroniza a lista de pacotes disponíveis nos repositóriosapt upgrade -y— aplica todas as atualizações disponíveis sem confirmação manualapt autoremove -y— remove dependências órfãs que não são mais necessáriasapt clean— limpa o cache local de pacotes baixados, liberando espaço
Rode esse bloco periodicamente — idealmente toda semana ou antes de qualquer instalação nova. Um sistema base desatualizado é a origem de boa parte dos problemas de compatibilidade com pacotes modernos.
3. Instalando o Docker Engine e o Docker Compose
Com o systemd habilitado via wsl.conf, a instalação segue o guia oficial do Docker para Ubuntu:
# Dependências e chave GPG
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Repositório oficial do Docker
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Instalação
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Adicione seu usuário ao grupo docker para não precisar de sudo a cada comando:
sudo usermod -aG docker $USER
newgrp docker
Habilite o serviço para iniciar automaticamente com o systemd:
sudo systemctl enable docker
sudo systemctl start docker
Verifique se tudo está funcionando:
docker version
docker compose version
docker run hello-world
O docker compose já está incluído como plugin — não é necessário instalar separadamente. Com o systemd ativo, o serviço sobe automaticamente toda vez que a distro é iniciada, sem necessidade de scripts adicionais.
4. Exportando a imagem para restauração rápida
Com o ambiente configurado e funcionando, é o momento ideal para criar um snapshot limpo — antes de qualquer projeto ou volume de dados entrar na equação. Esse backup permite restaurar um ambiente novo em poucos minutos caso algo dê errado.
No PowerShell, com a distro parada:
wsl --terminate DockerEnv
wsl --export DockerEnv C:\WSL\DockerEnv-backup-clean.tar
Para restaurar a partir desse backup em qualquer momento:
# Remove a distro atual (cuidado: apaga tudo)
wsl --unregister DockerEnv
# Reimporta do backup
wsl --import DockerEnv C:\WSL\DockerEnv C:\WSL\DockerEnv-backup-clean.tar --version 2
Faça novos backups periodicamente conforme o ambiente evolui — após instalar novas ferramentas, por exemplo. Uma boa estratégia é manter pelo menos dois snapshots: o ambiente limpo inicial e o estado mais recente estável. Nomear com data no arquivo ajuda a rastrear: DockerEnv-backup-2025-10-01.tar.
5. Limpando o ambiente Docker periodicamente
Containers parados, imagens não utilizadas, volumes órfãos e caches de build acumulam espaço rapidamente. O Docker oferece um comando que cuida de tudo isso de uma vez:
docker system prune --all
Esse comando remove: todos os containers parados, todas as imagens sem uso ativo, todas as redes não utilizadas e todo o cache de build. Use com consciência — imagens que você ainda pretende usar terão que ser baixadas novamente. Se quiser incluir volumes também:
docker system prune --all --volumes
Uma boa cadência é rodar o prune a cada quinze dias ou ao perceber crescimento anormal do arquivo .vhdx. Antes de rodar, verifique o que será removido sem deletar nada:
docker system df
Esse comando mostra um relatório de uso — imagens, containers, volumes e cache de build — com o tamanho de cada categoria e quanto pode ser recuperado.
6. Recuperando espaço em disco no Windows (compactando o VHDX)
Mesmo após o docker system prune, o arquivo .vhdx que armazena o disco virtual do WSL não devolve o espaço automaticamente para o Windows. O arquivo cresce conforme necessário, mas não encolhe sozinho — é preciso compactá-lo manualmente.
Primeiro, certifique-se de que a distro está parada e faça o prune dentro dela:
wsl --terminate DockerEnv
Em seguida, use o diskpart no PowerShell (como administrador) para compactar o VHDX:
diskpart
Dentro do prompt do diskpart:
select vdisk file="C:\WSL\DockerEnv\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
Alternativamente, se preferir um único comando via PowerShell:
Optimize-VHD -Path "C:\WSL\DockerEnv\ext4.vhdx" -Mode Full
O Optimize-VHD requer o módulo Hyper-V habilitado no Windows. Se ele não estiver disponível, o diskpart é a alternativa universal. Em ambientes com uso intenso de Docker, é comum recuperar vários gigabytes com esse processo — vale fazê-lo toda vez que rodar o docker system prune.
Criar e manter um ambiente WSL dedicado ao Docker é, antes de tudo, um exercício de clareza arquitetural aplicado ao próprio setup de desenvolvimento. É reconhecer que um ambiente bagunçado cobra seu preço em produtividade, tempo de boot e espaço em disco. Com os passos acima — criação, atualização, backup, limpeza e compactação — você tem um ciclo completo de manutenção que mantém o ambiente enxuto e confiável. Quando o ambiente está em ordem, a mente também fica.