如何在安装了额外诗歌依赖的稳定Docker容器中运行Locust(负载测试工具)?从文档中我们知道,在Docker中运行Locust很容易通过他们的基本镜像。
docker run -p 8089:8089 -v $PWD:/mnt/locust locustio/locust -f /mnt/locust/locustfile.py
但是,如果负载测试Python项目需要通过诗歌管理的额外库,则必须通过poetry run locust
运行locust命令。蝗虫文档只给出了以下示例,但使用了pip
:
FROM locustio/locust
RUN pip3 install some-python-package
如果您想将目录绑定挂载到容器,则会变得更加棘手,因为Poetry环境链接到创建它们的工作目录。
假设一个使用诗歌的python项目:
.
├── Dockerfile
├── README.md
├── data
├── poetry.lock
├── pyproject.toml
├── reports (mounting this directory to Docker to save reports)
└── src (contains the locust source code)
├── auth.py
├── config.py
├── locustfile.py
├── shapes
├── tasks
└── users.py
设置>我的Dockerfile
的内容如下:
FROM locustio/locust
USER $USERNAME
# Use non-root user as a security measure
RUN groupadd -g 61000 docker
RUN useradd -g 61000 -l -m -s /bin/false -u 61000 docker
# Setup and install poetry
RUN apt update &&
apt install -y git curl &&
pip install poetry
# cacheing project requirements
WORKDIR /code
COPY poetry.lock pyproject.toml /code/
# installing project requirements
RUN poetry install --no-interaction --no-ansi --no-root
COPY . /code
ENTRYPOINT [ "poetry", "run", "locust" ]
指出:
USER $USERNAME
对于获得正确的权限很重要- 诗歌环境链接到
code/
目录,它也是整个项目代码移动到 的地方。 - 入口点
ENTRYPOINT [ "poetry", "run", "locust" ]
是一个很好的模式,因为可以通过docker run
命令传递额外的参数。
运行容器
使用:
创建图像docker build -t locust .
负载测试示例:
docker run -p 8089:8089 --mount type=bind,src=$PWD/reports,dst=/code/reports locust -f src/locustfile.py --headless --host <HOST> --csv=reports/<PREFIX>
希望有帮助!