Docker 2024 04/Resource Restriction

Aus CCWiki
Zur Navigation springen Zur Suche springen

Im folgenden soll die Limitierung der Ressourcen für Container erläutert werden, diese Informationen Beziehen sich auf das Host System GNU/Linux.

Eine Liste der Option zur Ressourcen Limitierung von CPU, Memory, GPU und Disk IO findet sich hier und hier.
Während aller Tests docker stats in eigenem Terminal öffnen.

Testimage

Dockerfile

Inhalt in Datei Dockerfile

FROM ubuntu:22.04
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get install -y memtester pv

Building Image

docker build . -t dockerschulung/resource_limiting_base:1.0

Memory

512mb RAM, keine Möglichkeit zum swappen

docker run --memory 512m --memory-swap 512m --rm -it dockerschulung/resource_limiting_base:1.0 bash
# tail will be filled with up to 3000mb at a rate of 100mb/s
head -c 3000m /dev/zero | pv -L 100m | tail

512mb RAM, 1gb swap Speicher

docker run --memory 512m --memory-swap 1536m --rm -it dockerschulung/resource_limiting_base:1.0 bash
# tail will be filled with up to 3000mb at a rate of 100mb/s
head -c 3000m /dev/zero | pv -L 100m | tail

CPU

1 Kern

docker run --cpus 1 --rm -it dockerschulung/resource_limiting_base:1.0 bash
# stress-ng cpu test (16 cores) for 10 seconds
stress-ng --cpu 16 --timeout 10s

2 Kerne

docker run --cpus 2 --rm -it dockerschulung/resource_limiting_base:1.0 bash
# stress-ng cpu test (16 cores) for 10 seconds
stress-ng --cpu 16 --timeout 10s

0.5 Kerne

docker run --cpus 0.5 --rm -it dockerschulung/resource_limiting_base:1.0 bash
# stress-ng cpu test (16 cores) for 10 seconds
stress-ng --cpu 16 --timeout 10s

Disk IO

50mb/s lesen, 10mb/s schreiben

/dev/sda ist hierbei nur ein Beispiel. Je nachdem wohin geschrieben wird, muss das entsprechende Device gefunden werden.
docker run --device-write-bps /dev/sda:10mb --device-read-bps /dev/sda:30mb --rm -it dockerschulung/re
source_limiting_base:1.0 bash
# Write 100mb to /tmp/data (no cache)
dd if=/dev/zero bs=1M count=100 of=/tmp/data oflag=direct
# Read 100mb to /tmp/data (no cache)
dd if=/tmp/data bs=1M of=/dev/null iflag=direct

Network limiting

An dieser Stelle werden wir nicht weiter darauf eingehen, es gestaltet sich nicht so einfach wie die zuvor genannten Limitierungen. Weitere Informationen finden sich hier[1].