Docker-Windows Problemleri ve çözümleri

Hikaye kısmı

Yunus Emre Demir
4 min readJul 2, 2021

Docker Windows ile çalışırken çok stabil çalıştığı söylenemez. Nitekim, gerek disk kullanımı gerekse memory kullanımı konusunda oldukça bencil davranmaktadır. Windows’ta Docker kullanılabilmesi için WSL (windows subsystem for linux) de kurulması gerekmektedir. Docker, windows üzerinde çalıştırılırken 2 farklı problem oluşmaktadır. Bunlardan birisi ram kullanımı diğeri disk kullanımı problemleridir.

Ram Problemi Olayı

Ram’i bencilce sanki bilgisayarda çalışan tek işlem kendisiymişçesine kullanmaktadır. Bu durum bilgisayarı kilitleyebilmekte ve diğer işlemlerin çalışmasını olumsuz etkileyebilmektedir. Docker Sisteminin genel toplam ram kullanım miktarı, bilgisayardan (Ctrl Alt Delete ile task manager) görev yöneticisine girildiğinde “Vmmem” olarak karşımıza çıkmaktadır. Bu kullanım docker üzerinden ram kullanımlarına bakıldığında örtüşmemektedir. Her ne kadar arada farklı bir uygulama çalışıyor olsa da ve bu uygulamanın da bir ram kullanımı olacağı hesaba katılsa bile toplam ram kullanımı olması gerekenin oldukça üstünde olmaktadır. Örneğin: Aşağıda da görüldüğü üzere Docker üzerinde çalışan 4 adet konteyner bulunmaktadır.

Bu konteynerlerin ram kullanımı aşağıdaki gibidir.

Toplam ram kullanım miktarı hesaplandığında (24.8 + 132.2 + 18.4 + 953) 1128.4 Mb olmasına rağmen, bilgisayarda 4586.0 Mb ram kullandığı gözükmektedir. Bu kullanım oranı, konteynerlerde işlem yapıldıkça artmakta ve ram üst sınırına kadar ilerlemektedir.

Ram Problemi — Çözüm:

Bu problemi önlemenin yolu konteynerlerin ram kullanımına kısıt koymak değil. “Vmmem” kullanımına kısıt koymaktır. (Not: Portainer yardımıyla konteynerlerin kendisine de ksııt konulabilir. Ama gerek yok, zaten az harcama yapıyorlar.) Bunu nasıl yapılacağı aşağıdaki linkte kısaca anlatılmış. Özetle:

  1. %UserProfile%\ konumuna gelinir. (Klasörler de adres çubuğuna yapıştırılarak ilgili konuma gelinir.)

2. .wslconfig isimli bir dosya oluşturulur. (sağ tıkla Text Document oluştur, .wslconfig yaz, uzantısını sil.)

3. Dosya içine aşağıdaki komutlar yazılır ve kaydedilip kapatılır.

[wsl2]
memory=2GB

4. Komut satırı açılır ve wsl kapatma işlemi yapılır.

5. Docker Restart edilir.

6. Ram tüketimi artık en fazla 2 Gb olacaktır.

Disk Problemi

Docker’ın ne kadar yer kapladığını bulmak için %LocalAppData%\Docker\wsl\data konumuna gidilir. (klasörlerde adres çubuğuna yapıştırıldığında ilgili konuma gidilecektir.)

Burada toplam boyut gözükmektedir. Bu boyut sürekli artıyor ama hiç azalmıyorsa. 10 konteyneriniz vardı 5 ini tüm volumleri ile birlikte sildiniz ama yine de buradaki boyutta bir azalma olmadıysa geçmiş olsun. Bu sorunun üstesinden gelmek için bir takım öneriler verilse de bu öneriler her zaman işe yaramamaktadır sizlere kötü bir haberim var. Tek çözüm Silip yeniden kurmak umulur ki tekrar aynı sorunları yaşamazsınız. Veya linux’e geçin rahat edin. Forumlarda gördüğünüz her cevabı direkt uygulamayınız yoksa üzücü sonuçlar elde edebilirsiniz. (tüm verilerinizin silinmesi gibi)

Kısmi çözüm:

Bu çözümün haftada 1 kez manuel olarak uygulanarak disk size kontrol altında tutulmaya çalışılabilir. Çözüm aşağıdaki gibidir.
1. Hyper-V Management tool’un açık olduğundan emin ol
Go to Control Panel | Programs and features | Turn windows features on or off
2. Open Powershell as a administrator

wsl --shutdown
optimize-vhd -Path .\ext4.vhdx -Mode full

.\ yerine tam yol vermelisin. C:\Users… diye başlayan.

NOT: Arasıra, (kapalı ve kullanılmayan her şeyi silecek olan) aşağıdaki kod çalıştırılabilir. close olan ama lazım olan containerleri açmalısın. Dikkat et!
docker system prune -a

--

--