docker로 ngrinder 구동

ℹ️ nGrinder
naver에서 오픈소스로 관리하는 성능테스트(부하테스트) 툴로, web ui를 제공함.

compose로 묶지 않고 각각 구동하는 법

Controller 컨테이너 구동

# 이미지 pull
docker pull ngrinder/controller

 # run
docker run -d \
  -v ~/ngrinder-controller:/opt/ngrinder-controller \
  --name controller \
  -p 80:80 -p 16001:16001 -p 12000-12009:12000-12009 \
  ngrinder/controller

# 80: Default controller web UI port.
# 9010-9019: agents connect to the controller cluster thorugh these ports.
# 12000-12029: controllers allocate stress tests through these ports.

Agent 컨테이너 구동

# 이미지 pull
docker pull ngrinder/agent

# run. Controller와 같은 호스트에 위치하는 경우 link 옵션으로 controller를 인식시킴.
docker run -d \
  --name agent \
  --link controller:controller \
  ngrinder/agent

# run. Controller와 다른 호스트에 위치하는 경우.
docker run -d \
  --name agent \
  ngrinder/agent \
  <controller ip>:<controller port>

compose로 묶어서 구동하는 법

디렉터리 구조

/var/ngrinder 디렉터리 생성 후 다음과 같이 배치

/var/ngrinder
├── agent
├── controller
├── docker-compose.yaml
├── down
└── up
  • agent, controller: 컨테이너에 마운트 시킬 볼륨
  • down, up: docker compose 명령어를 더 짧게 실행하기 위한 스크립트

스크립트 작성

down

#!/bin/bash

docker compose down

up

#!/bin/bash

if [ -n "docker compose ps -q"  ]
    then
        echo "stopping existing containers..." 
        docker compose down
fi

docker compose up -d --scale agent=10

실행 권한 부여

sudo chmod u+x down up

스크립트 실행 예시

# 컨테이너 내리기만 할 때
./down

# 컨테이너 구동 (이미 구동중이라면 down 후 재구동하므로, 재구동할 때도 up만 실행)
./up

yaml 작성

services:
  controller:
    image: ngrinder/controller
    container_name: controller
    ports:
      - "8080:80"
      - "16001:16001"
      - "12000-12009:12000-12009"
    volumes:
      - ./controller:/opt/ngrinder-controller
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "5"
    networks:
      - ngrinder-network

  agent:
    image: ngrinder/agent
    container_name: agent
    depends_on:
      - controller
    volumes:
      - ./agent:/opt/ngrinder-agent
    deploy:
      resources:
        limits:
          memory: 1500m
          cpus: "1.0"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "5"
    networks:
      - ngrinder-network

networks:
  ngrinder-network:
    driver: bridge
  • 로그 로테이션 설정: 10mb씩 최대 5개 파일
  • agent 자원 제한: agent는 자원을 아주 많이 잡아먹을 수 있으므로 제한을 둠. cpu 코어 1개, 메모리 1.5gb
  • controller 포트 변경: 호스트 8080 -> 컨테이너 80으로 포워딩

이후 http://localhost:8080 으로 접속 시 로그인페이지를 볼 수 있음.

참고 문서

ngrinder 문서