├── .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 | --------------------------------------------------------------------------------