├── .docker-compose.yml.swp
├── README.md
├── apache-jmeter-master
└── Dockerfile
├── apache-jmeter-server
└── Dockerfile
├── docker-compose.yml
├── jmeter-base
└── Dockerfile
└── static-README.md
/.docker-compose.yml.swp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ajeetraina/jmeter-docker/b9b9db577107a7ee516ca22f31777f3bc554f88a/.docker-compose.yml.swp
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # jmeter-docker
2 |
Setting up JMeter under Swarm Mode
3 |
4 | Pre-requisite:
5 |
6 | 1. Installing Docker 17.03 on all the cluster of nodes
7 | 2. Setting up Swarm Mode Cluster( running atleast 1 master and n-number of Slave Nodes)
8 | 3. Installing Docker Compose on the master node
9 |
10 | 1. Installing Docker 17.03 on all the cluster of nodes:
11 |
12 | $curl -sSL https://get.docker.com/ | sh
13 |
14 | 2. Setting up Swarm Mode Cluster:
15 |
16 | On Master Node:
17 |
18 | $docker swarm init --listen-addr :2377 --advertise-addr :2377
19 |
20 | On Slave Node:
21 |
22 | $docker swarm join --token master-ip <-- Run this command on all the slave nodes
23 |
24 | 3. Installing Docker Compose on the master node:
25 |
26 | $curl -L https://github.com/docker/compose/releases/download/1.11.2/docker-compose-`uname -s`-`uname -m` > /usr/local
27 | /bin/docker-compose
28 | $chmod +x /usr/local/bin/docker-compose
29 |
30 | Pulling the Repository
31 |
32 | Login to master node and pull the repository:
33 |
34 | $git clone https://github.com/ajeetraina/jmeter-docker
35 | $cd jmeter-docker
36 |
37 | Running Docker Compose
38 |
39 | sudo docker stack deploy -c docker-compose.yml myjm
40 |
41 | 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.
42 |
43 | @master:~$ docker service ls
44 | ID NAME MODE REPLICAS IMAGE
45 | mlffd5djek3t myjm_slave replicated 3/3 ajeetraina/jmeter-server:latest
46 | rv1r3cjvzkg3 myjm_master replicated 1/1 ajeetraina/jmeter-master:latest
47 |
48 | Let us verify these containers on both the nodes:
49 |
50 | @master:~$ docker ps
51 | CONTAINER ID IMAGE
52 | COMMAND CREATED STATUS PORTS NAMES
53 | 4954e3ef40f6 ajeetraina/jmeter-master@sha256:1ad38973587725480e76a8914463c674ca95ddfe32e180e4695b8f9150c34981
54 | "/bin/bash" 2 hours ago Up 2 hours 60000/tcp myjm_master.1.bz2r7rrdrzomqwv56dpxi0m08
55 |
56 | Use the same command to verify on the slave nodes.
57 |
58 |
59 | Pushing the JMX file into the container
60 |
61 | $docker exec -i sh -c 'cat > /jmeter/apache-jmeter-2.13/bin/jmeter-docker.jmx' < jmeter-docker.jmx
62 |
63 | Starting the Load testing
64 |
65 | $docker exec -it bash
66 | root@4954e3ef40f6:/#cd /jmeter/apache-jmeter-2.13/bin
67 | $./jmeter -n -t jmeter-docker.jmx -R Listing the Slave IPs
73 |
74 | $ docker inspect --format '{{ .Name }} => {{ .NetworkSettings.IPAddress }}' $(sudo docker ps -a -q)
75 |
76 |
77 | Stopping all the containers in a single shot
78 |
79 | $docker stop $(docker ps -a -q)
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/apache-jmeter-master/Dockerfile:
--------------------------------------------------------------------------------
1 | #This Dockerfile builds Apache JMeter Master Executable based on ajeetraina/apache-jmeter-base
2 | FROM ajeetraina/apache-jmeter-base
3 | LABEL Description="This image is used to start the Apache JMeter Master Executable" Vendor="Collabnix" Version="1.0"
4 | #Port 60000 required for JMeter Master
5 | EXPOSE 60000
6 |
7 |
--------------------------------------------------------------------------------
/apache-jmeter-server/Dockerfile:
--------------------------------------------------------------------------------
1 | #This Dockerfile builds Apache JMeter Master Executable based on ajeetraina/apache-jmeter-base
2 |
3 | FROM ajeetraina/apache-jmeter-base
4 | LABEL Description="This image is used to start the Apache JMeter Server Executable" Vendor="Collabnix" Version="1.0"
5 |
6 | # Ports required for JMeter Slaves/Server
7 | EXPOSE 1099 50000
8 |
9 | # Application to be executed to start the JMeter container
10 | ENTRYPOINT $JMETER_HOME/bin/jmeter-server \
11 | -Dserver.rmi.localport=50000 \
12 | -Dserver_port=1099
13 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3.1"
2 | services:
3 | master:
4 | image: ajeetraina/apache-jmeter-master
5 | tty: true
6 | ports:
7 | - "60000"
8 | networks:
9 | - jm-network
10 | deploy:
11 | replicas: 1
12 | restart_policy:
13 | condition: on-failure
14 | delay: 10s
15 | max_attempts: 3
16 | window: 120s
17 | placement:
18 | constraints: [node.role == manager]
19 | slave:
20 | image: ajeetraina/apache-jmeter-server
21 | tty: true
22 | networks:
23 | - jm-network
24 | ports:
25 | - "50000"
26 | - "1099"
27 | deploy:
28 | mode: global
29 | restart_policy:
30 | condition: on-failure
31 | delay: 10s
32 | max_attempts: 3
33 | window: 120s
34 | placement:
35 | constraints: [node.role == worker]
36 | networks:
37 | jm-network:
38 |
--------------------------------------------------------------------------------
/jmeter-base/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:17.04
2 | LABEL Description="This image is used to start the Apache JMeter Master Executable" Vendor="Collabnix" Version="1.0"
3 | # Installig Pre-requisite Packages like wget & JRE
4 | RUN apt-get clean && \
5 | apt-get update && \
6 | apt-get -qy install \
7 | wget \
8 | default-jre-headless \
9 | telnet \
10 | iputils-ping \
11 | unzip
12 | # Installing jmeter
13 | RUN mkdir /jmeter \
14 | && cd /jmeter/ \
15 | && wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-3.1.tgz \
16 | && tar -xzf apache-jmeter-3.1.tgz \
17 | && rm apache-jmeter-3.1.tgz \
18 | && mkdir /jmeter-plugins \
19 | && cd /jmeter-plugins/ \
20 | && wget https://jmeter-plugins.org/downloads/file/JMeterPlugins-ExtrasLibs-1.4.0.zip \
21 | && unzip -o JMeterPlugins-ExtrasLibs-1.4.0.zip -d /jmeter/apache-jmeter-3.1/
22 | # Settingt Jmeter Home
23 | ENV JMETER_HOME /jmeter/apache-jmeter-3.1/
24 | # Finally Adding Jmeter to the Path
25 | ENV PATH $JMETER_HOME/bin:$PATH
26 |
27 |
--------------------------------------------------------------------------------
/static-README.md:
--------------------------------------------------------------------------------
1 | # Generating Load using Static IP Address
2 |
3 | In case you want to generate enough load so that the System Under test is stressed from different multiple IPs, follow the below procedure:
4 |
5 | Pre-requisite
6 |
7 | 1. Setting up Docker Host-1 and Docker Host-2
8 | 2. Setting up macvlan:
9 |
10 | On Docker Host-1:
11 |
12 | root@ubuntu4:~#ip link add virtual0 link eno1 type macvlan mode bridge
13 |
14 |
15 |
16 | root@ubuntu4:~# docker network create -d macvlan --subnet=10.91.15.0/24 --gateway=10.91.15.1 -o parent=virtual0 macvlan0
17 | 26bc952662e118fa855add784b65b53f4ca24c44a3b36af32819e89a62bc5f09
18 |
19 | root@ubuntu4:~# docker network ls
20 | NETWORK ID NAME DRIVER SCOPE
21 | 26bc952662e1 macvlan0 macvlan local
22 |
23 | Run the below command to start the container which uses Macvlan:
24 |
25 | $docker run -dit --net=macvlan0 --name slave01 ajeetraina/jmeter-master /bin/bash
26 |
27 | On Docker Host-2:
28 |
29 | root@ubuntu4:~#ip link add virtual0 link eno1 type macvlan mode bridge
30 |
31 |
32 |
33 | root@ubuntu4:~# docker network create -d macvlan --subnet=10.91.15.0/24 --gateway=10.91.15.1 -o parent=virtual0 macvlan0
34 | 26bc952662e118fa855add784b65b53f4ca24c44a3b36af32819e89a62bc5f09
35 |
36 | root@ubuntu4:~# docker network ls
37 | NETWORK ID NAME DRIVER SCOPE
38 | 26bc952662e1 macvlan0 macvlan local
39 |
40 | Run the below command to start the container which uses Macvlan:
41 |
42 | $docker run -dit --net=macvlan0 --name slave01 ajeetraina/jmeter-server /bin/bash
43 |
44 |
45 |
--------------------------------------------------------------------------------