Docker image is used to create container which could be run using Docker, Kubernetes.
I have used Alpine image as base image on which JMeter is downloaded and Plugin manager is installed, sample file Github
In docker folder you would two files that are required to create JMeter docker container.
- Dockerfile: This is used to create docker image
- launch.sh: This file is executed on start of container
Dockerfile
In this file you can configure JMeter version, timezone any other utilities that you want to have in the container.
Below are the variables that determines the JMeter version and timezone for the container
ARG JMETER_VERSION="5.3"
ENV TIMEZONE Asia/Kolkata
Below show the sample on adding properties, all the properties will be added to user.properties which will override jmeter.properties file.
We determine if JMeter should be running in Master mode (supervisor for other slave nodes) or Slave node.
Below code will decide on how JMeter needs to be started, and "mode" variable can be configured using environment variables for container.
if [ "$mode" == "master" ]; then
jmeter $@
else
jmeter-server >> /mnt/jmeter/logs/$mode-jmeter-server_`date '+%Y-%m-%d_%H-%M-%S'`.log
fi
docker build -t jmeter .
Below are the variables that determines the JMeter version and timezone for the container
ARG JMETER_VERSION="5.3"
ENV TIMEZONE Asia/Kolkata
launch.sh
In this file you can configure the properties and plugins that are required to be installed.Below show the sample on adding properties, all the properties will be added to user.properties which will override jmeter.properties file.
#add properties
echo server.rmi.ssl.disable=true >> /opt/apache-jmeter-5.3/bin/user.properties
echo server.rmi.ssl.disable=true >> /opt/apache-jmeter-5.3/bin/user.properties
To install any plugins using PluginManager, plugin name has to be appended to the existing. Plugin name can be obtained from JMeter Plugins website.
I have configure Dummy Sampler and Custom Thread Groups to be installed on Container start, you can add more as pre requirement.
I have configure Dummy Sampler and Custom Thread Groups to be installed on Container start, you can add more as pre requirement.
PluginsManagerCMD.sh install jpgc-casutg,jpgc-dummy
We determine if JMeter should be running in Master mode (supervisor for other slave nodes) or Slave node.
Below code will decide on how JMeter needs to be started, and "mode" variable can be configured using environment variables for container.
if [ "$mode" == "master" ]; then
jmeter $@
else
jmeter-server >> /mnt/jmeter/logs/$mode-jmeter-server_`date '+%Y-%m-%d_%H-%M-%S'`.log
fi
Build and push image to repository
To build Docker image, run the below command from the Folder which has both files
docker build -t jmeter .
Once the image is built, you can you view existing images using the below command
docker images
Next we need to tag the jmeter image with the name of repository and push, if you are using Docker hub as registry even though you don't have a existing repository a new one will be created on push.
docker tag <image-id> <repository-name>
docker push <repository-name>
docker push <repository-name>
Below image shows jmeter image after build which I tagged with my jmeter reporsitory in github and pushed it to Docker hub
Once image is pushed to repository we can use it.
Once image is pushed to repository we can use it.