Skip to main content Link Menu Expand (external link) Document Search Copy Copied

created at 2024-02-23

Table of contents

  1. 다 귀찮다! 그냥 이미지 받아서 돌리고 싶다면?
  2. arm64 기반 ngrinder 이미지 생성
    1. 1. nGrinder 소스 다운로드
    2. 2. Dockerfile 수정
    3. 3. Dockerfile 빌드
    4. 4. docker-compose.yml 수정
    5. 5. docker-compose build & up

요즘 ARM64 아키텍처를 사용하는 서버가 늘어나고 있습니다. MacBook M1, M2 등의 ARM64 아키텍처를 사용하는 개발자도 늘어나고 있죠. 그러나 기존의 부하 테스트 도구인 nGrinder는 AMD64 아키텍처를 기반으로 한 도커 이미지만 제공되어 ARM64 아키텍처에서는 정상적으로 동작하지 않습니다. 따라서 ARM64 아키텍처를 사용하는 서버에서도 nGrinder를 사용할 수 있도록 ARM64 아키텍처를 지원하는 도커 이미지를 만들어보겠습니다.

전 Intel MacBook 에 커피를 쏟아버려서 이번에 M2 MacBook 으로 변경했어요ㅜㅜ. 그래서 arm64 아키텍처 기반으로 nGrinder 를 사용해야 했습니다.

다 귀찮다! 그냥 이미지 받아서 돌리고 싶다면?

만약 직접 빌드하기 귀찮다면, 아래와 같이 사용자 루트에 ngrinder-controller 디렉토리 만들고 docker-compose.yaml 작성하여 compose 하시면 실행됩니다.

$ mkdir ~/ngrinder-controller
$ chmod 777 ~/ngrinder-controller
version: '3'

services:
  controller:
    image: ghkdqhrbals/ngrinder-controller:latest
    ports:
      - "80:80"
      - "16001:16001"
      - "12000-12009:12000-12009"
    volumes:
      - ~/ngrinder-controller:/opt/ngrinder-controller:rw
    networks:
      - ngrinder
  agent:
    image: ghkdqhrbals/ngrinder-agent:latest
    links:
      - controller
    networks:
      - ngrinder

networks:
  ngrinder:
    driver: bridge

arm64 기반 ngrinder 이미지 생성

이제 arm64 아키텍처 기반의 서버에서 동작하도록 도커 이미지를 만들어보겠습니다.

1. nGrinder 소스 다운로드

먼저 nGrinder 소스를 다운로드 받습니다.

$ git clone https://github.com/naver/ngrinder

2. Dockerfile 수정

다운로드 받은 nGrinder 소스의 docker/controller 디렉토리로 이동합니다.

gyuminhwangbo ngrinder% cd docker/controller

Dockerfile 을 열어서 아래와 같이 수정합니다. 먼저 arm64 아키텍처에서 동작하도록 amazoncorretto:11 을 기반으로 변경합니다. 이후 maven 3.6.x 버전을 현재 지원(2024.02.23)하는 버전인 3.8.8 로 변경합니다. 또한 yum 을 이용하여 tar, unzip, gzip, bash, udev, curl 을 설치합니다. curl 을 이용하여 maven과 gradle 을 다운받고, 압축해제하고, 실행하는데 필요한 패키지들입니다.

FROM amazoncorretto:11
RUN yum install -y tar unzip gzip bash udev curl
ARG MAVEN_VERSION=3.8.8
...

다운로드 받은 nGrinder 소스의 docker/agent 디렉토리의 Dockerfile 도 비슷하게 수정합니다.

FROM amazoncorretto:11
RUN yum install -y tar unzip gzip bash udev curl
...

3. Dockerfile 빌드

docker 디렉토리의 prepare.sh 를 실행하여 nGrinder 빌드 *.war 파일을 복사합니다.

빌드는 따로 jdk 8-11 에서 진행해야합니다. 만약 빌드된 파일을 가지고 계시다면, docker/controller/binary 디렉토리에 복사해두셔도 됩니다.

$ sh prepare.sh

4. docker-compose.yml 수정

최신 버전의 docker-compose 를 사용하여 platform 을 지정해줍니다. 그리고 networks 로 묶어서 내부 local 통신을 설정해주었습니다. 또한 platform 으로 linux/arm64 를 지정해주었습니다.

여기서 ~/ngrinder-controller 는 nGrinder 컨트롤러의 데이터를 저장할 호스트 디렉토리입니다. 사전에 실행한 sh prepare.sh 커맨드를 통해 ~/ngrinder-controller 디렉토리가 생성되었을 것입니다. 바로 여기에 볼륨을 마운트 시키는 거에요.

version: '3'

services:
  controller:
    platform: linux/arm64 # specify the platform
    image: ghkdqhrbals/ngrinder-controller:latest
    build:
      context: controller # dockerfile location
      dockerfile: Dockerfile # dockerfile name
    ports:
      - "80:80"
      - "16001:16001"
      - "12000-12009:12000-12009"
    volumes:
      - ~/ngrinder-controller:/opt/ngrinder-controller:rw
    networks:
      - ngrinder
  agent:
    platform: linux/arm64
    image: ghkdqhrbals/ngrinder-agent:latest
    build:
      context: agent
      dockerfile: Dockerfile
    links:
      - controller
    networks:
      - ngrinder

networks:
  ngrinder:
    driver: bridge

5. docker-compose build & up

docker-compose 를 이용하여 빌드하고 실행합니다.

$ docker-compose -f docker-compose.yml build

그러면 아래와 같이 빌드된 이미지가 생성될 것입니다.

gyuminhwangbo@Gyuminui-MacBookAir spring-db-storke % docker images
REPOSITORY                        TAG            IMAGE ID       CREATED         SIZE
ghkdqhrbals/ngrinder-agent        latest         2f27c73f9485   10 hours ago    853MB
ghkdqhrbals/ngrinder-controller   latest         926be7824674   11 hours ago    1.13GB

이제 docker-compose 를 이용하여 실행합니다.

$ docker-compose -f docker-compose.yml up -d