Setting up JMeter Distributed Load Testing Environment under Docker 17.03 Swarm Mode Cluster
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.


Setting up JMeter under Swarm Mode


  1. Installing Docker 17.03 on all the cluster of nodes
  2. Setting up Swarm Mode Cluster( running atleast 1 master and n-number of Slave Nodes)
  3. Installing Docker Compose on the master node

1. Installing Docker 17.03 on all the cluster of nodes:

            $curl -sSL | sh

2. Setting up Swarm Mode Cluster:

On Master Node:

          $docker swarm init --listen-addr <master-ip>:2377 --advertise-addr <master-ip>:2377

On Slave Node:

          $docker swarm join --token <TOKEN> master-ip  <-- Run this command on all the slave nodes

3. Installing Docker Compose on the master node:

        $curl -L`uname -s`-`uname -m` > /usr/local 
          $chmod +x /usr/local/bin/docker-compose

Pulling the Repository

Login to master node and pull the repository:

            $git clone
            $cd jmeter-docker

Running Docker Compose

               sudo docker stack deploy -c docker-compose.yml myjm

It will push jmeter-master to the master node and jmeter-server to the slave nodes and make it ready to start load using the external JMX file.

          @master:~$ docker service ls
          ID            NAME         MODE        REPLICAS  IMAGE
          mlffd5djek3t  myjm_slave   replicated  3/3       ajeetraina/jmeter-server:latest
          rv1r3cjvzkg3  myjm_master  replicated  1/1       ajeetraina/jmeter-master:latest

Let us verify these containers on both the nodes:

      @master:~$ docker ps
      CONTAINER ID        IMAGE                                                                                                     
      COMMAND             CREATED             STATUS              PORTS               NAMES
      4954e3ef40f6        ajeetraina/jmeter-master@sha256:1ad38973587725480e76a8914463c674ca95ddfe32e180e4695b8f9150c34981       
      "/bin/bash"         2 hours ago         Up 2 hours          60000/tcp           myjm_master.1.bz2r7rrdrzomqwv56dpxi0m08

Use the same command to verify on the slave nodes.

Pushing the JMX file into the container

   $docker exec -i <container-running-on-master-node> sh -c 'cat > /jmeter/apache-jmeter-2.13/bin/jmeter-docker.jmx' < jmeter-docker.jmx

Starting the Load testing

  $docker exec -it <container-on-master-node> bash
  root@4954e3ef40f6:/#cd /jmeter/apache-jmeter-2.13/bin
  $./jmeter -n -t jmeter-docker.jmx -R<list of containers running on slave nodes seperated by commas)

Handful Commands

Listing the Slave IPs

   $ docker inspect --format '{{ .Name }} => {{ .NetworkSettings.IPAddress }}' $(sudo docker ps -a -q)

Stopping all the containers in a single shot

   $docker stop $(docker ps -a -q)