Controle de memória RAM do Docker no Windows
Tive que escrever um Docker Compose de 400 linhas
Recentemente acompanhei alguns casos onde o docker aplicou a sua altíssima demanda por recursos da máquina, então resolvi fazer um breve resumo com dicas mega rápidas e super práticas (para Windows Users, a última dica é geral):
O que fazer então?
1. Crie um arquivo chamado .wslconfig
Salve ele na pasta do seu usuário (caminho: %userprofile%
basta copiar e colar no win + r) e insira o seguinte conteúdo:
[wsl2]
memory=8GB #limitação de memória RAM do seu computador pra a VM do linux
processors=2 #limitação do número de cores do seu processador :)
1.1. Isso limitará alguns recursos do WSL na sua máquina.
Cuide para que os containers tenham recursos suficientes ou você terá um outro problema que é o excesso de I/O (disco) por falta de memória RAM. Este limite é imposto sobre a máquina virtual Linux, ou seja, ainda é possível limitar a memória de cada container, desde que dentro desse valor total.
2. Use o comando:
docker stats
para verificar o uso de memória RAM em cada container, se ele estiver no máximo, configure mais memória (caso exista hehe).
3. Após um tempo...
Você terá muitas imagens docker estacionárias, considere higienizar as imagens e posteriormente o VHDX que o Windows/WSL cria. O caminho default desse arquivo é: %userprofile%\AppData\Local\Docker\wsl\data\ext4.vhdx
Para diminuir o vhdx, você pode usar a ferramenta hyper-v manager, basta instalar ela nos pacotes do windows, ou pesquise: how to shrink a VHDX hyper-v manager.
4. Limite a memória RAM de cada imagem:
Faça isso no seu Docker Compose file. Para isso, insira uma configuração como esta no serviço do Postgres (ex.):
services:
postgres:
mem_limit: 256m
Isto impedirá o Docker de disponibilizar toda a memória RAM alocada para o WSL, e também impedira o gestor de VMs do Windows de sair correndo para alocar um monte de memória no seu computador (o que resultará naquele famoso processo vmmemm com tonelas de RAM alocada).
Pro meu primeiro post era isto, espero que colabore com a gestão de recursos dessa ferramenta incrível que é o Docker.
Valeu.