WSL dedicado: isolando seu ambiente Docker no Windows

Como criar uma distribuição WSL separada e exclusiva para o Docker, mantendo seus ambientes organizados, leves e fáceis de resetar.

8 min

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órios
  • apt upgrade -y — aplica todas as atualizações disponíveis sem confirmação manual
  • apt autoremove -y — remove dependências órfãs que não são mais necessárias
  • apt 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.

Gostou deste conteúdo?

Este blog é um projeto pessoal mantido com dedicação. Se meus artigos te ajudaram, considere apoiar a continuidade deste trabalho.