Comment attribuer plus de mémoire au conteneur Docker

118

Au fur et à mesure que le titre se lit, j'essaie d'attribuer plus de mémoire à mon conteneur. J'utilise une image du hub docker appelée "aallam / tomcat-mysql" au cas où cela serait pertinent.

Lorsque je le démarre normalement sans aucun indicateur spécial, il y a une limite de mémoire de 2 Go (même si j'ai lu que la mémoire est illimitée si elle n'est pas définie)

Voici mes statistiques de docker

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

J'ai essayé de définir la mémoire explicitement comme ça mais avec les mêmes résultats

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

J'ai lu que peut-être la VM est ce qui la restreint. Mais alors pourquoi les statistiques de docker montrent-elles que la limite de taille du conteneur est de 2 Go?

kane
la source

Réponses:

203

Cette 2GBlimite que vous voyez est la mémoire totale de la machine virtuelle dans laquelle le docker s'exécute.

Si vous utilisez docker-for-windows ou docker-for-mac, vous pouvez facilement l'augmenter à partir de l'icône Whale 🐳 dans la barre des tâches, puis allez dans Préférences -> Avancé:

Préférences Docker

Mais si vous utilisez VirtualBox derrière, ouvrez VirtualBox, sélectionnez et configurez la mémoire affectée à la machine docker.

Voir ceci pour Mac:

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

MÉMOIRE Par défaut, Docker pour Mac est configuré pour utiliser 2 Go de mémoire d'exécution, allouée à partir de la mémoire totale disponible sur votre Mac. Vous pouvez augmenter la RAM sur l'application pour obtenir des performances plus rapides en définissant ce nombre plus haut (par exemple sur 3) ou plus bas (sur 1) si vous souhaitez que Docker pour Mac utilise moins de mémoire.

Pour les fenêtres:

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

Mémoire - Modifiez la quantité de mémoire utilisée par Docker pour Windows Linux VM

Robert
la source
73
Comment faire sans l'interface graphique?
Philippe
13
@Philippe, quel est votre cas d'utilisation? Docker pour Windows ou docker pour Mac est livré avec guli. Je pense que votre cas est un docker natif sur Linux (sans aucune machine virtuelle, ce qui est le cas pour les systèmes de production / cloud). Dans de tels cas, vous n'avez pas besoin de configurer la mémoire de la VM car docker a la machine à trous pour ses utilisations.
Robert
10
Ouais, je l'ai compris plus tard. Donc, si je veux que mon conteneur Docker ait> 4 Go de RAM, je n'ai rien à faire si je développe sous Linux?
Philippe
3
Ce n'est pas possible, principalement parce que vous n'attribuez pas de mémoire aux conteneurs Docker, mais vous limitez la quantité de mémoire qu'un conteneur peut utiliser. Notez que la réponse actuelle ne concerne pas l'attribution de mémoire aux conteneurs, mais l'attribution de mémoire à la machine virtuelle dans laquelle le docker s'exécute.
Robert
2
@SiddharthPant, docker fonctionnant directement sur une machine Linux utilisera autant de mémoire disponible, il n'y a donc pas de limite autre que la limite physique.
Robert
21

Allouez la mémoire maximale à votre machine docker à partir de (préférence docker -> avance)

Capture d'écran des paramètres avancés: Capture d'écran des paramètres avancés.

Cela définira la limite maximale de consommation du docker lors de l'exécution de conteneurs. Maintenant, exécutez votre image dans un nouveau conteneur avec l'option -m = 4g pour 4 Go de RAM ou plus. par exemple

docker run -m=4g {imageID}

N'oubliez pas d'appliquer les changements d'augmentation de la limite de RAM. Redémarrez le docker et vérifiez que la limite de RAM a bien augmenté. Cela peut être l'un des facteurs pour lesquels vous ne voyez pas l'augmentation de la limite de RAM dans les conteneurs Docker.

File d'attente du marché
la source
17

Si vous souhaitez modifier le conteneur par défaut et que vous utilisez Virtualbox, vous pouvez le faire via la ligne de commande / CLI:

docker-machine stop
VBoxManage modifyvm default --cpus 2
VBoxManage modifyvm default --memory 4096
docker-machine start
tout détruire
la source