🐛

Locust→Nginxで負荷がけ出来る環境を作成する(docker-compose)

2023/07/18に公開

はじめに

Locustで遊ぶ環境を手軽に用意するために、
docker-composeで一式を揃えてみました。そのメモを書きます。

負荷がけ: Locust
対象: nginx

のような感じですね。

イメージ図

環境

Docker: 24.0.4
docker-compose: 2.19.1

検証

composeファイル

version: '3.9'
services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    networks:
      - kensyo

  locust:
    image: locustio/locust:latest
    volumes:
      - ./locustfile.py:/mnt/locust/locustfile.py
    depends_on:
      - nginx
    command: -f /mnt/locust/locustfile.py --host http://nginx
    ports:
      - "8089:8089"
    networks:
      - kensyo

networks:
  kensyo:

ポイントは2点です。

  • GUIへアクセスするために8089番ポートへの外部アクセスを許可する
  • locustコンテナはEntrypointがlocustとなっているため、commandで指定する必要はありません。
$ docker inspect -f '{{.Config.Entrypoint}}' locustio/locust:latest
[locust]

locustfile.py

nginxの/に向けてリクエストを投げるシンプルなものです。

from locust import HttpUser, task

class WebsiteUser(HttpUser):

    @task
    def hello_world(self):
        self.client.get("/")

nginx.conf

/にアクセスしたらHello, World!を返すシンプルなものです。

events {}
http {
    server {
        listen 80;
        location / {
            return 200 'Hello, World!';
        }
    }
}

実行

docker compose up -d
でOKです。

GUIアクセス、負荷試験

--host http://nginxで指定したため、Hostで最初から選択されています。

失敗なくリクエストがうまくいくことを確認しましょう。

参考

https://docs.locust.io/en/stable/running-in-docker.html
https://docs.locust.io/en/stable/quickstart.html

Discussion