O Windows 10 vem com WSL2, tornando possível usar o Docker integrado às distribuições Linux que rodam no Windows 10. Aqui vamos mostrar como colocar os arquivos em outro lugar uma vez que não é possível apenas mudando as configurações no Docker.
Eu costumo usar uma máquina equipada com SSD e um HD. Como uso bastante docker, as imagens podem ocupar um espaço considerável no SSD. Então uma alternativa seria configurar o Docker para salvar as imagens em outro lugar. Mas com Docker usando WSL2 não funciona mudar as configurações do Docker, é necessário mover a distro usada pelo Docker no WSL2.
O Docker para Windows quando usado com WSL2 salva um arquivo *.vhdx
, onde ficam os dados usados pelo Docker, no caminho %LOCALAPPDATA%\Docker\wsl\data
. O que de certa forma é uma distro usada pelo Docker para subir os containers.
Se você rodar:
wsl --list -v
Vai listar as distros que o WSL tem na sua máquina:
NAME STATE VERSION
* Ubuntu Running 2
docker-desktop Running 2
docker-desktop-data Running 2
Podemos observar que existe a docker-desktop-data
. É aqui que o Docker salva as imagens, volumes nomeados, etc.
Então, não basta inserir nas configurações do Docker um data-root
e dizer para qual diretório salvar. Se fizer isso, o Docker não vai funcionar. Lembrando que isso se aplica apenas quando usado com WSL2.
Então, é necessário fazer um trabalho com o WSL. Vamos exportar para um arquivo .tar
a distro utilizada pelo Docker e depois importar para outro diretório.
- Primeiro, vamos parar o serviço do Docker, para isso vamos parar todas as distros WSL em execução com o comando:
wsl --shutdown
- Agora para exportar a distro:
wsl --export docker-desktop-data "docker-desktop-data.tar"
- Depois de exportar, desativamos a distro:
wsl --unregister docker-desktop-data
-
Criamos o diretório onde vai ficar, no meu caso é
D:\wsldata\docker-desktop-data
-
Agora só importar para um novo diretório:
wsl --import docker-desktop-data "D:\wsldata\docker-desktop-data" "docker-desktop-data.tar" --version 2
- Depois de importar você pode excluir o arquivo
docker-desktop-data.tar
.
No passo 6
é importante o parâmetro --version 2
pois indica sobre qual versão estamos importando a distro e como é pra usar com Docker tem que ser a versão 2 ou seja wsl2
Pronto, agora você pode reiniciar o serviço do Docker e vai estar tudo ok. As imagens, volumes nomeados, etc. vão estar no novo diretório, poupando espaço no SSD.
Observação: Se você quiser fazer isso para outras distros que não necessáriamente do Docker, é bom atentar que esse processo de importação acaba definindo o usuário padrão como root, pra resolver isso basta editar o arquivo /etc/wsl.conf e incluir:
[user]
default=<username>
Óbvio que não esquecendo de substituir <username>
pelo nome do usuário desejado que seja o padrão da distro.
Isso é tudo.