1. 컨테이너 부하 테스트 프로그램
    1. stress container 생성
      • 컨테이너 빌드 : 부하 테스트 프로그램 stress를 설치하고 동작시키는 컨테이너 빌드
      • CPU 부하 테스트 : 2개 cpu core 를 100% 사용하도록 부하 발생
        stress --cpu 2
      • 메모리 부하 테스트 : 프로세스 수 2개와 사용할 메모리만큼 부하 발생 :
        stress --vm 2 --vm-bytes <사용할 크기>
  2. 메모리 리소스 제한 실습
    1. docker run -m 100m --memory-swap 100m stress:latest --vm 1 --vm-bytes 90m -t 5s
      • 최대 100mb 사용 가능, swap 메모리 0mb 사용 가능.
      • stress:latest 사용 시, 5초동안 90mb 메모리 부하
        • 5초 뒤 작동됨.
    2. docker run -m 100m --memory-swap 200m stress:latest --vm 1 --vm-bytes 150m -t 5s
      • 최대 100mb 사용 가능, swap 메모리 0mb 사용 가능.
      • stress:latest 사용 시, 5초동안 150mb 메모리 부하
        • 최대 작업양이 부하양보다 적기 때문에 바로 종료됨.(FAIL)
    3. docker run -m 100m  stress:latest --vm 1 --vm-bytes 150m -t 5s
      • 최대 100mb 사용 가능, swap 메모리는 생략되어있기 때문에, 200mb 로 지정됨
      • stress:latest 사용 시, 5초동안 150mb 메모리 부하
        • 5초 대기 후 진행됨
    4. docker run -d -m 100M --name m4 --oom-kill-disable=true nginx
      • nginx 컨테이너는 out of memory killer 가 kill 시키지 못함.
      • docker inspect m4 을 통해 oomkillDisable : true 확인
      • cat /sys/fs/cgroup/memory/docker/{container ID}/memory.oom_control로 확인
  3. cpu 리소스 제한 실습
    1. docker run --cpuset-cpus 1 --name c1 -d stress stress --cpu 1
      • cpu 1번에서 stress 컨테이너를 실행함.
      • 특정 cpu 코어 1개만 사용하도록 허용함.
        • htop 명령어를 통해 1번 cpu 만 사용중인 것을 확인할 수 있음.
    2. docker run --cpuset-cpus 0-1 --name c2 -d stress stress --cpu 1
      • cpu 0 또는 1번에서 stress 컨테이너를 실행하며, 상황에 따라 변경함.
      • 특정 cpu 코어 1개만 사용하도록 허용함
    3. docker run -c [할당량] --name [컨테이너명] -d [컨테이너 이미지:태그]
      • 여러개의 컨테이너 실행 및 cpu 할당량 지정
        • cload1 : 2048
        • cload2 : 1024
        • cload3 : 512
        • cload4 : 512
    4. docker stats : 컨테이너 별 리소스 사용 체크하기
  4. Block I/O 제한 실습

    1. docker run -it --rm --device-write-iops /dev/sda:10 ubuntu:latest /bin/bash
      /# dd if=/dev/zero of=file1 bs=1M count=10 oflag=direct
      • --device-write-iops 를 적용하여 write 속도의 초당 quota를 제한하여 IO write를 발생시킴.
    2. docker run -it --rm --device-write-iops /dev/sda:100 ubuntu:latest /bin/bash
      /# dd if=/dev/zero of=file1 bs=1M count=10 oflag=direct
      • write quota 를 100으로 변경 후 같은 작업을 반복한다.
  5. cAdvisor 실행
    https://github.com/google/cadvisor
    1. https://github.com/google/cadvisor 해당 부분 터미널에 붙여넣기
    2. docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' cadvisor : docker host ip 확인하기
      • http://{docker host ip}:8080 으로 접속하여 cadvisor 사용 (접속 안됨)
  6.  문제풀이
    1. db라는 이름을 가지는 mysql 컨테이너를 다음의 조건으로 실행하시오
      • MYSQL_ROOT_PASSWORD:pass
      • 물리 메모리 : 200M
      • 스왑 메모리 : 300M
      • 할당 CPU core 수 : 1
        • docker run --name db -e MYSQL_ROOT_PASSWORD=pass -d -p 3306:3306 -m 200m --memory-swap 300m --cpus="1" mysql:latest
    2. db 컨테이너 리소스 사용량을 docker stat 명령을 통해 확인해보자.
      • docker stats db