• 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 gz包,并指定到具体目录-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

     

  • 相关阅读:
    sql
    java常见异常
    call的用法及NodeList与Array的区别
    os模块
    random模块
    time模块
    序列化模块
    模块介绍
    内置函数
    匿名函数-lambda
  • 原文地址:https://www.cnblogs.com/T-CYP/p/14657204.html
Copyright © 2020-2023  润新知