Docker 2024 04/Resource Restriction
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 [1].