Docker tips & tricks - Limitation de la consommation des ressources d'un conteneur Docker

Il peut arriver parfois la situation où un conteneur Docker consomme une quantité excessive de ressources sur un hôte provoquant une charge excessive du conteneur. Une solution est de limiter les ressources que ce conteneur peut consommer, en terme de CPU ou de mémoire. Dans cet article, nous allons limiter la quantité de mémoire consommée.

Pour cela, créons une image Docker basée sur Alpine et installant le package stress-ng (https://kernel.ubuntu.com/~cking/stress-ng/), qui permet de tester un système de différentes manières :

cat <<EOF> Dockerfile
FROM alpine:latest
RUN apk update && \
    apk add stress-ng
EOF

Créons l’image, que l’on va appeler alpine-stress :

docker build -t alpine-stress .

L’image se construit :

Sending build context to Docker daemon  4.158MB
Step 1/2 : FROM alpine:latest
 ---> d6e46aa2470d
Step 2/2 : RUN apk update &&     apk add stress-ng
 ---> Using cache
 ---> 6c1f156ce981
Successfully built 6c1f156ce981
Successfully tagged alpine-stress:latest

Maintenant, créons le conteneur avec la commande stress-ng --vm 1 --vm-bytes 1G -t 1h :

docker container run --rm -d --name stressed --memory 512M alpine-stress stress-ng --vm 1 --vm-bytes 1G -t 1h

L’ID du conteneur créé est affiché :

6fd5bbe3f60d8cf1f0f49eb39907f87906d4517ccf2bade3652943d67cee5b09

Voici quelques explications :

  • --vm : spécifie le nombre de stresseurs de mémoire virtuelle,
  • --vm-bytes : spécifie la mémoire consommée,
  • -t : spécifie la durée.

Vérifons que le conteneur a bien été créé et qu’il est toujours en cours d’exécution :

docker ps -a

Nous voyons apparaître le conteneur que nous venons de créer :

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
6fd5bbe3f60d        alpine-stress       "stress-ng --vm 1 --…"   2 seconds ago       Up 1 second                             stressed

Affichons la liste des conteneurs avec leurs limitations de ressources :

docker stats

Cette commande affiche :

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
6fd5bbe3f60d        stressed            0.46%               511.9MiB / 512MiB   99.98%              836B / 0B           180kB / 0B          3

MEM USAGE indique la mémoire utilisée tandis que LIMIT indique la limite de mémoire. On voit que le conteneur n’utilise à cet instant 511.6 MiB sur 512 MiB. Nous remarquons que bien que nous ayons demandé de consommer 1 GiB de mémore, la mémoire consommée est inférieure à la limite des 512 MiB que nous avons spécifiée, sans la dépasser.

Nous aurions pu également limiter la consommation de ressources en utilisant l’argument --cpu lors de l’exécution du conteneur Docker.

Vous savez maintenant comment éviter qu’un hôte ne soit surchargé à cause d’une consommation excessive de ressources par un des conteneurs Docker tournant sur celui-ci.

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×