1 2 3

linux安装docker+jmeter分布式

一、前言

安装方式可以采用:CentOS7和Ubuntu;

我们的电脑通常安装的是 Windows 操作系统:Windows 下有 Windows 2003, Windows 2007, Win7,Win10;
还有其他操作系统:Linux,Dos,Mac,Unix等。

Linux 系统,就有2个系列的概念:debian 系和 redhat 系统。

debian系主要有Debian,Ubuntu,Mint等及其衍生版本;
redhat系主要有RedHat,Fedora,CentOs等。
所以,CentOS 是 Linux操作系统的一个品牌。

二、docker介绍

Docker是DotCloud开源的、可以将任何应用包装在Linux container中运行的工具。Docker基于Go语言开发,Docker可以自动化打包和部署任何应用,方便地创建一个轻量级私有PaaS云,也可以用于搭建开发测试环境以及部署可扩展的web应用等。

2.1Docker vs VM

从下图可以看出,VM是一个运行在宿主机之上的完整的操作系统,VM运行自身操作系统会占用较多的CPU、内存、硬盘资源。Docker不同于VM,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟之内完成。由于Docker轻量、资源占用少,使得Docker可以轻易的应用到构建标准化的应用中。但Docker目前还不够完善,比如隔离效果不如VM,共享宿主机操作系统的一些基础库等;网络配置功能相对简单,主要以桥接方式为主;查看日志也不够方便灵活。

个人理解,如果不对,欢迎留言纠正:docker是一个容器,基于镜像工作的,每一个软件其实就是一个镜像,镜像好比是类,容器好比是对象,类可以创建n个对象,在不同的对象里工作,比如mysql镜像,可以创建多个容器,同时运行多个mysql,或者同时运行mysql、SQL server;

 

 

三、本文介绍在centos上安装docker

3.1yum配置

yum是centos的命令语法

linux服务器采用ares测试环境ip-可以通过home-cmdb查看

首先需要切换root身份》sudo -i,可以发现命令行的身份由lcsuper转换成了root

 

3.1.1检查下内核版本uname -r

只要大于3.10即可

3.1.2然后执行yum update 命令

is this ok [y/d/n]:选择y-yes

 

 如图所示complete表示成功

3.1.3 安装需要的软件包

yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

》yum install -y yum-utils device-mapper-persistent-data lvm2

3.1.4 设置yum源为阿里云

》yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 

3.2 yum安装docker

3.2.1可以查看所有仓库中所有docker版本:

yum list docker-ce --showduplicates | sort -r

如果不指定docker-ce版本那么直接安装最新版本

如果指定版本的命令是:docker-ce-18.09.1

》yum -y install docker-ce(安装社区版)

3.2.2安装错误卸载docker

如果安装错误,可以卸载,先查看安装的版本内容:命令yum list installed | grep docker

然后执行移除的命令:yum remove docker.x86_64 docker-client.x86_64 docker-common.x86_64 -y

多个软件用空格分隔,一起移除

3.2.3安装成功docker-ce

3.2.4查看centos版本

rpm -q centos-release

3.2.5docker 配置国内镜像源(从 ustc 拉取镜像)

ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。

docker 从 docker hub 拉取镜像,因为是从国外获取,速度较慢。可以通过配置国内镜像源的方式,从国内获取镜像,提高拉取速度。

查看etc下有没有docker文件:

cd /etc

ls

 

 

 首先创建docker文件

命令:mkdir -p /etc/docker

mkdir -p xx/yy的好处就是一次可以创建多级文件夹,若xx文件夹不存在,则先创建xx文件夹,然后在xx文件夹下创建yy文件夹

 然后编辑文件:vim /etc/docker/daemon.json

点击键盘:insert进入输入状态

输入:{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}

然后esc,再输入:wq回车则保存成功

 

 

 

 

 

3.3docker的启动与停止

3.3.1启动docker

命令:systemctl start docker

3.3.2查看启动状态

命令:systemctl status docker

出来的Active(running)就说明你的docker安装成功,你可以自己安装你自己需要使用的工具了

 

3.3.3设置开机自动启动命令:

systemctl enable docker.service

验证docker是否启动成功可以通过:docker run hello-world

因为没有该镜像,所以自动从远程拉取镜像,再次执行则返回:hello成功

3.3.5停止docker命令

systemctl status docker

3.4镜像命令

3.4.1查看镜像

命令:docker images

repository:资料库即镜像名称

TAG:标签即版本

IMAGEID:镜像id

CREATED:镜像创建时间

SIZE:镜像大小

这些镜像都是存储在docker宿主机的/var/lib/docker目录下

3.4.2搜索镜像

如果需要从网络中搜索镜像们可以通过以下命令搜索

docker serch 镜像名称

 

 

3.4.3拉取镜像

docker pull 镜像名称

3.4.4删除镜像

docker rmi 镜像id

3.4.5删除所有镜像

docker rmi 'docker images -q'

3.5容器命令

3.5.1查看正在运行的容器

docker ps

查看所有容器

不管运行没有,都会查到

docker ps -a

查看最后一次运行的容器

docker ps -l

查看停止的容器

docker ps -f status=exited

3.5.2创建与启动容器

docker run 

-i:表示运行容器

-t:表示容器启动后会进入其命令行,加入这两个参数后,容器创建就登陆进去,即分配一个伪终端,即交互式创建容器;

-d:表示后台运行容器,-t是命令行ip变成了容器的id,无法操作宿主机的应用了;

--name:为创建的容器命名

-v:目录映射关系

-p:端口映射

交互式创建容器:

docker run -i -t --name  镜像名称:TAG /bin/bash

-i和-t的作用是进入交互模式。/bin/bash的意思就是使用容器的命令行来输入命令。执行结果如下:

name名称不填则会自动生成一个名称

docker run -i -t --name=mysql  mysql:latest /bin/bash

或者

docker run -it --name mysql  mysql:latest /bin/bash

root@7d150a0fb029:/#

root后面跟的就是容器id,表明你已经进入容器,可以输入命令了,你可以输入一些常用命令试试:

exit可以退出容器

docker run -di --name=mysql2 mysql:latest

这是后台运行容器mysql

登陆容器用命令:docker exec -it mysql2 /bin/bash

 exec 是进入已经存在的容器

四、docker部署jmeter

4.1DockerFile

4.1.1什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

4.1.2使用 Dockerfile 定制镜像

命令介绍官网:https://www.runoob.com/docker/docker-dockerfile.html

在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容:

进入docker目录

新建Dockerfile:mkdir Dockerfile,

然后进入Dockerfile目录,

编辑Dockerfile:vim Dockerfile

 

 输入内容如下:

#jdk的镜像,定制的镜像都是基于 FROM 的镜像,为基础镜像,jdkopenjdk:8-jre-sli可以查看宿主机多有镜像

FROM openjdk:8-jre-slim
#镜像的作者
MAINTAINER cici
#定义Jmeter版本的变量
ARG JMETER_VERSION=5.4.1
#安装实用程序,apt-get,是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。
#在shell 格式中,您可以使用 \(反斜杠)将一条 RUN 指令继续到下一行
RUN apt-get clean && \
apt-get update && \
apt-get -qy install \
wget \
telnet \
iputils-ping \
unzip
# Install JMeter,tar -xvzf解压tar.gz\tgz包,并指定到具体目录-c,rm是linux删除文件,wget是下载文件,地址是jmeter官方下载jmeter历史版本的地址;
RUN mkdir /jmeter \
&& cd /jmeter/ \
&& wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz \
&& tar -xvzf apache-jmeter-$JMETER_VERSION.tgz -C /jmeter \
&& rm apache-jmeter-$JMETER_VERSION.tgz
# Set ENV JMeter的环境变量设置
ENV JMETER_HOME /jmeter/apache-jmeter-$JMETER_VERSION/
ENV PATH $JMETER_HOME/bin:$PATH
#拷贝宿主机上的jmeter插件到镜像中,对于 COPY命令来说,如果要把本地的文件拷贝到镜像中,那么本地的文件必须是在上下文目录中的文件
##WORKDIR 命令为后续的 RUN、CMD、COPY、ADD 等命令配置工作目录。也就是把当前目录即Dockerfil下的jar包copy到ext目录下;
#workdir $JMETER_HOME/lib/ext/
#copy JMeterPlugins-Extras.jar .
#copy JMeterPlugins-Standard.jar .
workdir $JMETER_HOME/
#将文件从Dockerfile copy到相对jmeter_home的绝对路径lib//ext下
copy JMeterPlugins-Extras.jar lib/ext/
copy JMeterPlugins-Standard.jar lib/ext/
copy 新建文本文档.txt bin/
copy dcjmt0415.jmx bin/

 

apt-get install为了在容器中安装软件

编辑容器文件方式:

进入容器,直接和宿主机一样,使用vim命令编辑文件。

注:如果vim命令没有,可以使用yum -y install vim或者apt-get install vim命令安装。

sudo apt-get install -y

这里主要将的就是-y选项,添加这个选项就相当于不需要重复地确认安装

sudo apt-get install -q

即-quiet,静默安装,当然也不是完全静默,会将低等级的log信息屏蔽。

sudo apt-get remove

既然有安装就会有卸载,remove指令就是卸载,值得注意的是,remove仅仅卸载软件,但是并不卸载配置文件

sudo apt-get purge

卸载指令,同时卸载相应的配置文件

 Dockerfile命令的ADD和cpy的区别:

ADD可以将宿主机Dockerfile文件copy到指定目录,它可以copy压缩包并解压,然后把压缩包删除

copy不能将压缩包解压缩

例如:

workdir /jmeter/

#将当前宿主机的Dockerfile下的123.tgz文件copy到workdir根目录下,构建镜像后进入容器的根目录可以看到123.tgz变成了123文件夹

ADD ./123.tgz ./

CMD/entrypoint都是在容器run启动时执行的命令,后面跟的是参数/命令行,cmd如果启动容器时指定了其他命令,则cmd不生效,但是entrypoint可以生效;

下图copy的文件地址必须是Dockfile下的,否则会提示找不到文件,以下是错误的copy示范

 

 这里的.指的是打包当前路径下的所有文件,后面的.不要漏了,指的是在当前宿主机Dockerfile目录下构建,否则报错;

4.1.3打包镜像

docker build -t dkmt .

 

 

4.1.4 查看镜像是否打包成功

docker images | grep dcjmt

 

 

4.1.5推送镜像到docker hub远程仓库

将镜像push到镜像仓库,那么所有人都能获取了,前提需要登陆docker hub镜像仓库

仓库用户名需要登录docker-hub注册

https://hub.docker.com/signup

注册成功那么需要docker login 登录一下才能push到仓库

需要先将镜像打标,才能push

tag后面是镜像名称和版本,然后用户名/镜像名称和版本

docker tag dcjmt dctercc/dcjmt:5.4.1

docker push dctercc/dcjmt:5.4.1

 

 

 查看镜像:docker images

 

 

4.1.6准备jmeter脚本和参数文件

运行jmeter需要容器中有.jmx脚本

方法1:脚本可以提前把文件拖到linux的/tmp目录下,

cp到宿主机的Dockerfile目录下

然后在Dockerfile编辑里,放到工作目录apache-jmeter-5.4.1的bin目录下

如果有参数变量还需要准备参数文件同jmx文件,这个文件的路径必须和csv配置的路径一样

在容器中/jmeter就是根目录

 

方法2:从宿主机拷文件到容器里面

docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径

docker cp /etc/docker/Dockerfile/1/123.txt dcjmt3name:/jmeter/apache-jmeter-5.4.1/bin

不管容器有没有启动,拷贝命令都会生效

4.1.7启动已经存在的容器

docker start 容器id,然后用exec命令来选择是交互式还是守护式操作容器

run -it/di是基于镜像创建容器并启动,所以登陆已存在的容器是先启动容器然后exec登陆

echo命令和cat命令解释:

echo 123>123.txt是将123内容写入文件中

cat是输出文件内容

 然后构建镜像,运行容器,然后进入bin目录:cd bin查看是否有文件验证

4.1.8运行jmeter脚本命令

有文件那么用jmeter脚本命令运行就会在指定目录生成测试脚本

 

 

4.1.9生成报告从容器里面拷文件到宿主机

这里是具体的文件可以用这个命令,如果是文件夹需要压缩后再cp

docker cp 容器名:要拷贝的文件在容器里面的路径       要拷贝到宿主机的相应路径 

docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt

将test1/下面的文件压缩为test1.zip的压缩包,/表示目录下的所有文件

zip -q -r test1.zip test1/

 

 

 五、docker部署jmeter分布式

参考教程:https://developer.aliyun.com/article/769520

我们在同一主机中创建所有容器。
例如,JMeter和JMeter slave都在同一台机器上运行。因此,所有系统资源将由这些容器共享。

5.1搭建slave机

sudo命令:

sudo -i 直接运行sudo命令加-i参数
sudo su 运行sudo命令给su命令提权,运行su命令。
sudo -i 运行结果 PWD=/root
sudo su 运行结果 PWD=/home/用户名(当前用户主目录)

5.1.1配置slave镜像文件

5.1.2构建镜像

docker build -t dcjmtslave7 .

 

docker tag dcjmtslave7 dctercc/dcjmtslave7:5.4.1

docker push dctercc/dcjmtslave7:5.4.

 

 提示java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)

说明Dockerfile文件中没有开启server.rmi.ssl.disable

方法如下:

-Jserver.rmi.ssl.disable=true

5.1.3查看端口号是否被占用命令

netstat -ntpl |grep 60005

查询结果没有,则说明没有在占用

 

5.1.4启动slave机

docker run -it --name slave9 dctercc/dcjmtslave8:5.4.1 /bin/bash

运营之后jmeter-server就起来了

 

 

 我们可以看下docker ps

 

5.1.5查看容器ip

需要登陆容器查看

采用后台登陆的方式

docker inspect --format='{{.NetworkSettings.IPAddress}}' slave10

或者查看容器的全部信息

docker inspect slave10

或者运行以下命令查看全部容器的ip

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

5.1.4退出容器命令

exit或者Ctrl+P+Q

5.2搭建master容器

在基础镜像的容器中做的修改,都不会影响镜像的内容

所以如果想引用基础镜像做了修改后的容器,那么就需要复制容器才行;

 

 ls -a1指令指的是查看当前目录下所有含隐藏文件

 

 退出编辑Dockerfile界面用ctrl+z

5.2.1配置master机镜像文件

如果运行容器时提示-D无效的话,可以把entrypoint去掉,直接通过外部编辑jmeter.properties,再cp到容器中也一样的效果

5.2.2运行启动镜像文件

 

 

5.2.3测试是否引用成功

将测试脚本cp到容器中

docker cp /etc/docker/Dockerfile/dcjmt0415.jmx master2:/jmeter/apache-jmeter-5.4.1/bin

csv文件

docker cp /etc/docker/Dockerfile/新建文本文档.txt master2:/jmeter/apache-jmeter-5.4.1/bin 

容器执行脚本

jmeter -n -t bin/dcjmt0415.jmx -l bin/log4.jtl -e -o bin/test4

 

 5.3分布式运行

1.将jmeter.properties中的server.rmi.ssl.disable=true

2.将remote_hosts=172.17.0.3:1088,172.17.0.4:1088配置

端口可不填

3.将测试脚本.jmx文件copy到master/slave的bin目录

通过先把文件拖拽到linux的tmp里面,再cp到宿主机的Dockerfile目录下,然后从这个目录cp到容器中

csv参数文件同理也cp到容器中

-R后面需要跟具体的slave机ip

-r指的全部的slave机

jmeter -n -t dcjmt0415.jmx -l log7.jtl -e -o test7 -r

 5.3.1生成的报告

docker cp master5:/jmeter/apache-jmeter-5.4.1/bin/test7 /etc

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2021-04-16 14:55  teacher-程  阅读(1299)  评论(0编辑  收藏  举报
levels of contents