# stressTestSystemDocker
**Repository Path**: smooth00/stressTestSystemDocker
## Basic Information
- **Project Name**: stressTestSystemDocker
- **Description**: 压测平台系统stressTestSystem的Docker部署方案
- **Primary Language**: Docker
- **License**: GPL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 19
- **Forks**: 16
- **Created**: 2020-09-07
- **Last Updated**: 2025-06-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# stressTestSystemDocker
#### 介绍
压测平台系统stressTestSystem的Docker部署方案;本方案对应的平台源码 https://gitee.com/smooth00/stressTestSystem
#### mysql版部署方案
1、以CentOS7为例,安装docker环境
```
yum update -y
yum install docker epel-release python-pip -y
pip install --upgrade pip
pip install docker-compose
```
2、将编译好的renren-fast.jar放到 [mysql版/renren-fast/] 目录下
如果想通过git拉取源码到镜像中编译,就需要修改renren-fast/Dockerfile,将java编译过程写入
3、将[mysql版]目录整体上传到/home目录下(可以指定别的目录)
同时要求创建mysql卷目录
```
mkdir -p /opt/mysql
chmod -R 777 /opt/mysql
```
4、环境变量配置文件 .env
默认不需要修改,如果需要分开不同主机部署,就要创建多个HOST_IP变量,同时需要修改docker-compose
5、整体构建数据库及平台镜像
docker-compose build
或直接构建并整体启动容器
docker-compose up 或者用 nohup docker-compose up &
如果要离线部署,就在连网的机器上先docker-compose build后将镜像打成tar包到目标机上解压,然后再用docker-compose up启动;
由于 docker-compose.yml 文件中配置映射出去的端口是8088(不是默认的8080),所以用 http 8088 访问压测平台(注意避免防火墙拦截)
6、如果要批量清除容器和镜像
```
docker ps | grep renren- | grep -v "grep" | awk '{print $1}' | xargs docker rm -f
docker ps | grep stress- | grep -v "grep" | awk '{print $1}' | xargs docker rm -f
docker images | grep renren- | grep -v "grep" | awk '{print $3}' | xargs docker rmi -f
docker images | grep stress- | grep -v "grep" | awk '{print $3}' | xargs docker rmi -f
```
#### h2版部署方案
1、以CentOS7为例,安装docker环境
```
yum update -y
yum install docker epel-release -y
```
2、将编译好的renren-fast.jar放到当前[h2版]目录下
如果想通过git拉取源码到镜像中编译,就需要修改Dockerfile,将java编译过程写入
3、将[h2版]目录整体上传到/home目录下(可以指定别的目录)
4、进入[h2版]目录下构建平台镜像
```
docker build -t renren_fast_test:1.0 .
```
5、启动容器
```
docker run --name renren_fast_test -d --restart=unless-stopped -p 8088:8080 renren_fast_test:1.0
```
由于映射出去的端口是8088(不是默认的8080),所以用 http 8088 访问压测平台
6、如果要清除容器和镜像
```
docker ps | grep renren_ | grep -v "grep" | awk '{print $1}' | xargs docker rm -f
docker images | grep renren_ | grep -v "grep" | awk '{print $3}' | xargs docker rmi -f
```
#### 分布式节点部署方案
1、可以采用docker-compose ,参考mysql版部署方案
2、jmeter分布式节点部署要求:
由于jmeter要求主从节点之间保持互通,要求端口要能够互访,所以Jmeter节点有必要采用docker版(Jmeter 5.1.1)
jmeter-slave 的Dockerfile文件参考如下(我们压测平台和主从节点统一用的是5.1.1版本):
```
# Use JDK-8 on alpine.
From openjdk:8-alpine
MAINTAINER smooth00
ENV JMETER_VERSION 5.1.1
# Install Pre-requisite Packages like wget
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk update && apk add wget unzip vim && apk add -U tzdata && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# Installing jmeter
RUN mkdir /jmeter \
&& cd /jmeter/ \
&& wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz \
&& tar -xzf apache-jmeter-$JMETER_VERSION.tgz \
&& rm apache-jmeter-$JMETER_VERSION.tgz \
&& mkdir -p /jmeter/apache-jmeter-$JMETER_VERSION/bin/stressTestCases \
&& wget -P /jmeter/apache-jmeter-$JMETER_VERSION/lib/ext https://repo.maven.apache.org/maven2/kg/apc/jmeter-plugins-extras-libs/1.4.0/jmeter-plugins-extras-libs-1.4.0.jar \
&& wget -P /jmeter/apache-jmeter-$JMETER_VERSION/lib/ext https://repo.maven.apache.org/maven2/kg/apc/jmeter-plugins-standard/1.4.0/jmeter-plugins-standard-1.4.0.jar
# Settingt Jmeter Home
ENV JMETER_HOME /jmeter/apache-jmeter-$JMETER_VERSION/
# Finally Adding Jmeter to the Path
ENV PATH $JMETER_HOME/bin:$PATH
# Volume directory to be mapped (for test files)
VOLUME $JMETER_HOME/bin/stressTestCases
# Ports to be exposed from the container for JMeter Slaves/Server
EXPOSE 1099 50000
ENV SSL_DISABLED true
# Application to run on starting the container
WORKDIR $JMETER_HOME/bin/stressTestCases
ENTRYPOINT ../jmeter-server \
-Dserver.rmi.localport=50000 \
-Dserver_port=1099 \
-Jserver.rmi.ssl.disable=${SSL_DISABLED} \
-Djava.rmi.server.hostname=${HOST_IP}
```
Dockerfile编译:docker build -t jmeter-slave:5.1.1 .
注意:各个节点的时间同步非常重要,时间误差将会导致测试数据采样不准确
jmeter会自动从官网下载,如果觉得下载慢,可以先下载然后通过COPY载入镜像。
或者直接pull(镜像我已上传):docker pull smooth00/jmeter-slave
jmeter-slave容器启动:
```
docker run --name jmeter-slave -d --restart=unless-stopped -p 2099:1099 -p 50000:50000 -e HOST_IP=172.16.1.140 jmeter-slave:5.1.1
```
如果要同步参数化文件到Docker中,需要创建卷目录(建议分布式压测不要用参数化文件,效率不高):
```
mkdir -p /opt/docker-jmeter/bin/stressTestCases
chmod 755 -R /opt/docker-jmeter/bin/stressTestCases
docker run --name jmeter-slave -d --restart=unless-stopped -p 2099:1099 -p 50000:50000 -v /opt/docker-jmeter/bin/stressTestCases:/jmeter/apache-jmeter-5.1.1/bin/stressTestCases -e HOST_IP=172.16.1.140 jmeter-slave:5.1.1
```
如果使用卷目录映射,那么平台界面上的分布节点管理,就需要正确的配置宿主机的jmeter_home路径(以便同步参数化文件):/opt/docker-jmeter
最最关键的一点,在docker中调用参数化文件和虚拟机中是一样的,脚本中引用参数一定不要设置路径(这样就能默认调用 $JMETER_HOME/bin/stressTestCases),
3、以上是jmeter-slave的Dockerfile,在build成镜像后可以通过docker-compose调用,Jmeter-slave和压测平台的集群部署docker-compose.yml样例参考如下:
```
version: '2'
services:
jmeter-slave:
image: jmeter-slave:5.1.1
environment:
HOST_IP: 172.16.1.140
stdin_open: true
network_mode: bridge
tty: true
ports:
- 2099:1099/tcp
- 50000:50000/tcp
renren-fast:
image: renren_fast_test:1.0
stdin_open: true
network_mode: bridge
tty: true
ports:
- 8088:8080/tcp
```
**说明:**
由于jmeter-slave docker本身以服务方式自动启动,所以在压测平台里就只需要添加节点,并选择手工启动(SSH远程启动是不行的).
另外以上样例docker用的jmeter-slave端口是2099(创建多个docker实例记住端口不要冲突)。