I have shared some posts how to run Locust in Local or in Cloud, as slave or master. At this time I want to share how you can run it in a Docker. To fully get the benefits of Locust I am using it with Python 3 so I created a Docker file and images upload to the Docker Hub, and the project is on the GitHub.
The Dockerfile has the minimum available requirements but we also have a new file called `requirements.txt` which you can add required python libraries to install inside the container by pip install lib. The Dockerfile is:
When you got the docker-locust image, you can now run your script. At the end of the Dockerfile you can see that ENTRYPOINT [ "/usr/local/bin/locust" ] this enable us to use the image as service which means that you can directly call it same as using Locust installed locally. See the run command below:
Running Locust in a Docker
Running the Locust with my image is pretty simple if you used without docker, just try other options which most suited for your case.
docker run --rm --name locust -v $PWD:/locust gunesmes/docker-locust -f /locust/run.py --host=http://www.github.com --num-request=100 --clients=10 --hatch-rate=1 --only-summary --no-web
the meaning of the parameters in the command as follows:
- run: running docker
- --rm: Automatically remove the container when it exits so we can rerun if fails
- --name: Assign a name to the container
- -v: Bind mount a volume, we are mounting the local files, run.py, inside the container. $PWD:/locust means to mount the path present working directory to the path called /local inside the container
- gunesmes/docker-locust: name of the images which works as Locust service so it is a synonym of the locust . For the first time you run it downloads the images from hub.docker.com, but later it will just download the update container layer if there is.
- . . .: and the rest of commands are for the locust specific. You can see them at the end of the post.
See what is happening when you run the command for the first time:
List of Locust command, note that Locust will remove the --num-request in favour of stopping it by a timer parameter.