Jak przypisać więcej pamięci do kontenera Docker

117

W miarę jak czyta się tytuł, próbuję przypisać więcej pamięci do mojego kontenera. Używam obrazu z centrum Docker o nazwie „aallam / tomcat-mysql”, jeśli jest to istotne.

Kiedy uruchamiam go normalnie bez żadnych specjalnych flag, jest limit pamięci 2 GB (mimo że czytam, że pamięć jest nieograniczona, jeśli nie jest ustawiona)

Oto moje statystyki dokerów

CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O           PIDS
ba57d6c9e9d2        0.22%               145.6 MiB / 1.952 GiB   7.29%               508 B / 508 B       0 B / 6.91 MB       68

Próbowałem ustawić pamięć w ten sposób, ale z tymi samymi rezultatami

docker run -d --memory=10g --memory-swap=-1 -e MYSQL_PASSWORD=password -p 3307:3306 -p 8081:8080 aallam/tomcat-mysql

Czytałem, że być może maszyna wirtualna jest tym, co ją ogranicza. Ale w takim razie dlaczego statystyki dockera pokazują, że limit rozmiaru kontenera wynosi 2 GB?

kane
źródło

Odpowiedzi:

203

Widoczny 2GBlimit to całkowita pamięć maszyny wirtualnej, na której działa docker.

Jeśli korzystasz z docker-for-windows lub docker-for-mac, możesz łatwo zwiększyć go za pomocą ikony Whale 🐳 na pasku zadań, a następnie przejdź do Preferencje -> Zaawansowane:

Preferencje Dockera

Ale jeśli używasz VirtualBox w tyle, otwórz VirtualBox, wybierz i skonfiguruj pamięć przypisaną do docker-machine.

Zobacz to dla Maca:

https://docs.docker.com/docker-for-mac/#memory

PAMIĘĆ Domyślnie Docker for Mac korzysta z 2 GB pamięci wykonawczej przydzielonej z całkowitej dostępnej pamięci na komputerze Mac. Możesz zwiększyć ilość pamięci RAM w aplikacji, aby uzyskać szybszą wydajność, ustawiając tę ​​liczbę wyższą (na przykład na 3) lub niższą (na 1), jeśli chcesz, aby Docker dla komputerów Mac zużywał mniej pamięci.

Dla Windowsa:

https://docs.docker.com/docker-for-windows/#advanced

Pamięć - zmień ilość pamięci używanej przez platformę Docker dla maszyny wirtualnej z systemem Windows Linux

Robert
źródło
72
Jak to zrobić bez GUI?
Philippe
13
@Philippe, jaki jest Twój przypadek użycia? Docker dla Windows lub Docker dla Mac jest dostarczany z guli. Myślę, że twoja sprawa ma natywny docker na Linuksie (bez żadnej maszyny wirtualnej, co ma miejsce w przypadku systemów produkcyjnych / chmury). W takich przypadkach nie musisz konfigurować pamięci maszyny wirtualnej, ponieważ docker ma maszynę do otworów do swoich zastosowań.
Robert
10
Tak, odkryłem to później. Więc jeśli chcę, aby mój kontener Docker miał> 4 GB pamięci RAM, nie muszę nic robić, jeśli programuję w systemie Linux?
Philippe
3
Nie jest to możliwe, głównie dlatego, że nie przypisujesz pamięci do kontenerów docker, zamiast tego ograniczasz ilość pamięci, z której może korzystać kontener. Zwróć uwagę, że obecna odpowiedź nie dotyczy przypisywania pamięci do kontenerów, ale przypisywania pamięci do maszyny wirtualnej, na której działa docker.
Robert
2
@SiddharthPant, docker działający bezpośrednio na Linuksie będzie wykorzystywał tyle pamięci, ile jest dostępne, dlatego nie ma ograniczeń innych niż fizyczne.
Robert
21

Przydziel maksymalną pamięć do maszyny docker z (preferencje dockera -> zaawansowane)

Zrzut ekranu ustawień zaawansowanych: Zrzut ekranu ustawień zaawansowanych.

Spowoduje to ustawienie maksymalnego limitu wykorzystania platformy docker podczas uruchamiania kontenerów. Teraz uruchom obraz w nowym pojemniku z flagą -m = 4g na 4 gigabajty pamięci RAM lub więcej. na przykład

docker run -m=4g {imageID}

Pamiętaj, aby zastosować zmiany zwiększania limitu pamięci RAM. Zrestartuj docker i dwukrotnie sprawdź, czy limit pamięci RAM wzrósł. Może to być jeden z powodów, dla których nie widać wzrostu limitu pamięci RAM w kontenerach docker.

Market Queue
źródło
17

Jeśli chcesz zmienić domyślny kontener i korzystasz z Virtualbox, możesz to zrobić za pomocą wiersza poleceń / CLI:

docker-machine stop
VBoxManage modifyvm default --cpus 2
VBoxManage modifyvm default --memory 4096
docker-machine start
zniszczyć wszystko
źródło