Docker 搭建测试环境一(Linux 安装 Docke ;Docke 安装 MySQL、Tomcat、Linux、nginx 集成 连个Tomcat环境)

时间:2024-03-06 22:47:23

性能测试环境搭建(一)

环境概况

docker 基础知识

docker 搭建数据库

性能测试环境搭建(二)

docker 搭建 tomcat 项目

docker 搭建 nginx 集群

jmeter 进行集群

性能测试性能测试环境搭建(三)

docker-link 搭建 tomcat-mysql

docker-link 搭建 tomcat-nginx 集群

一、性能测试环境搭建:虚拟机 + Linux + Docke + MySQL

1、环境概况

操作系统:linux

    • 云服务器:自己购买
    • 虚拟机:自行安装就好了;从给的百度网盘下载 ova 文件

数据库:mysql

应用中间件:tomcat + nginx(译:恩就死:反向代理,负载均衡的集群)

下图说明:Linux 服务器 里面装了 MySQL 和 Tomcat + nginx(实际的企业里面 MySQL 和 Tomcat + nginx 应用程序不会装在一个机器上)

tomcat 可以用很多个

  

环境搭建方式:

    • 手工:经典、传统、用时比较长、需要一定基础工具
    • docker:潮流、快捷----课程选用

 

二、环境搭建

1、安装虚拟机 vmware 自行安装

  (安装了 vmware 之后 一定 要重启动电脑

2、安装 CentOS linux 7 系统

  1、打开位置:文件 --- 打开 --- 选择 ova (Linux系统)文件

  

  2、点击“导入”,会提示失败,但是没有关系 点击 “重试”就可以

  • 虚拟机已经安装了 Linux ,安装好了就可以使用

  

  3、修改 “编辑虚拟机设置” 配置

  

  4、如果出现 下图提示,不用管

  

  5、如果出现 “ 此主机支持Intel VT-x,但Intel VT-x处于禁用状态”

   修改配置:https://jingyan.baidu.com/article/59a015e3929235b695886539.html

  

  6、设置 root 密码(输入密码时是看不到的123456);

  • 使用 ifconfig 查看 ip地址(之后会用到)
  • 使用 java -version 查看 jdk 版本

  

  

 

三、Docker 基本知识

1、Docker基础

Docker 是一个 开源 的应用容器引擎,基于 GO 语言,遵循 Apache2.0 开源协议

容器:是一个沙箱,相互之间没有任何接口,自身性能开销极低;相当于袋子

容器内部,其实是一个不全的 linux 内核系统 (cgroups\namespace\UnionFS:三个组成了容器)

2、Docker 特点:

linux 操作系统

资源开销极低

沙箱,容器闻相互隔离

3、应用:

容器组为应用中间件

同一个硬件上运行更多容器

4、Docker组成:

  • 镜像 Image:从仓库中复制出来
    • 文件镜像(就像纸张,它有不同的尺寸)
      • 镜像:镜子中的图形
  • 容器 Container:
    • 镜像运行的实体(由纸张组成的笔记本,不同尺寸纸张,构成不同大小笔记本)
  • 仓库 Repository:
    • 镜像仓库(纸张不同大小,尺寸标签)

 

Linux 环境下 Docker 安装

1、使用 Xshell 链接刚才创建的 Linux 系统 

  linux: centos7(root:123456)

  reboot now:重启虚拟机

2、安装 docker 第一步:

  安装 docker 相关依赖:yum install -y yum-utils device-mapper-persistent-data lvm2

  

3、安装 docker 第二步:

  一键安装dicker:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

  

4、把安装的服务设置为 开机自启动

配置开机启动:systemctl enable docker

重启动 docker:systemctl restart docker

如果在公司里面不是 root 权限需要加(sudo):sudo systemctl enable docker

  docker帮助命令:docker --help

  

6、docker 基本使用

直接 docker --help 帮助命令

    • Usage: docker [OPTIONS] COMMAND
    • docker + 【OPTIONS 选项】 + 命令
    •  

命令:

  docker pull:我们从仓库里面拉取镜像

  从 Daocloud 拉取镜像地址: https://hub.daocloud.io/ 

 

使用 docker 安装 Linux 系统

  使用命令在 当前 Linux 系统下 在安装一个 Linux  系统,登录镜像地址,查找 centos

   

  就可以看到最新的 镜像仓库地址 和 版本

  

docker images:查看镜像是否存在

  

docker rmi:删除镜像

  可以根据 IMAGE ID 删除镜像

  

docker rm -f 容器名称 or 容器id:删除容器

  拉取镜像:docker pull daocloud.io/library/centos:latest

  创建容器:docker run -itd --name bbb_name daocloud.io/library/centos:centos8

  

 

docker start 容器名称 or 容器id:启动容器

docker restart 容器名称 or 容器id:重启容器

docker stop 容器名称 or 容器id:停止

docker exec:退出

 

docker ps -a:在加上 -a,查看所有运行和未运行的容器

docker pa:查看正在运行的容器;

 

docker exec -it 容器名称或ID /bin/bash:进入容器

exit:退出当前 容器

 

docker exec -it 容器名称或ID /bin/bash:进入容器

cat /etc/redhat-release:查看发行版本

  

容器与宿主机之间拷贝文件

从宿主机拷贝文件到容器

    • docker cp 宿主文件路径 容器id:容器内路径  

从容器拷贝文件到宿主机

    • docker cp容器id:容器内路径 宿主文件路径  

常用命令:

  

 

创建一个新容器并运行

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

docker run -itd --name=container_name -p 80:80 -v $PWD:/data nginx:latest

创建一个 名为 container_name 的容器,拉取的镜像地址

示例:

  先拉取镜像:docker pull daocloud.io/library/centos:latest

  在创建容器:docker run -itd --name bbb_name daocloud.io/library/centos:centos8

options 选项

-i:以交互模式运行容器

-t:为容器重新分配一个伪输终端

-d:后台运行容器

-e username="value:设置环境变量

-p:指定端口映射主机端口:容器端口

-v:本地文件路径映射到容器路径

--name="":指定容器名称

--link=[ ]:添加链接到另一个容器(--link 容器 A 名称:别名).

 

Linux 系统安装 vi 命令

  命令:yum install vim -y

验证vim 命令,创建文件:vim 2.txt

  操作 2.txt 文件:i 进入编辑状态,随意输入内容,ESC 退出编辑状态,:wq 保存名退出

  

 

Docker 搭建 mysql 数据库

第一步:dockerhub 国内网站,确定要安装的版本

  

 

 

第二步:下载镜像

  docker pull daocloud.io/library/mysql:5.7.4

第三步:创建 MySQL 数据库容器:

没有开机自启动

docker run -itd --name aaa_mysql_577 -p 3316:3306 -e MYSQL_ROOT_PASSWORD=root123456 daocloud.io/library/mysql:5.7.7

开机自启动命令

docker run -itd --restart always --name aaa_mysql_577 -p 3316:3306 -e MYSQL_ROOT_PASSWORD=root123456 daocloud.io/library/mysql:5.7.7

  reboot now:重启虚拟机,可以验证是否是开机自启动

 

如果没有下载镜像:

开机自启动命令

  docker run -itd --restart always --name aaa_mysql_576 -p 3317:3306 -e MYSQL_ROOT_PASSWORD=root123456 daocloud.io/library/mysql:5.7.6

  会自行下载镜像

  

 

链接 MySQL 数据库

  1、使用 ifconfig 查看 IP地址 + 创建MySQL 时的端口号

  2、使用工具链接数据库,输入ip 地址、端口号

  

使用 Navicat Premium 链接 MySQL 数据库

          

新建数据库;在数据库 新建查询 ,执行表结构 SQL;

     ---------- 

  查看表结构是否存在

  

 

创建第一个 tomcat 容器:8080端口:

下载镜像:

确定 tomcat 版本: tomcat8、tomcat9

从 dockerhub 中找到对网版本的tag: 8.5.60

下载镜像:docker pull tomcat:8.5.60

 

创建第1个 tomcat 容器与 mysql 数据库关联:

docker run -itd --name tomcat4 -p 8084:8080 --link mysql57:mysql -v $PWD/logs4:/usr/local/tomcat/logstomcat:8.5.60

-v:转机,本地的某个路径或者某个文件,映射到我的容器里面的某一个路径或者某一个 文件下面去

拷贝项目包到容器

docker cp erp.war tomcat4:/usr/local/tomcat/webapps

修改项目配置:application.yml

  • 开发者节点数据库配置修改
    • ip为:mysql  
    • 端口为:mysql 默认端口3306  

从宿主机拷贝修改后的文件到容器:

docker cp application.yml tomcat4:/usr/local/tomcat/webapps/erp/WEB-INF/classes/application.yml

重启动tomcat1容器

docker restart tomcat4

 

 

1、拉取镜像:

docker pull daocloud.io/library/tomcat:9.0.0-jre8

    • jre8:Java 运行环境  
    • jdk:Java 开发工具包,jdk 包含 jre  

  查看镜像是否存在:docker images

  

2、使用这个镜像创建容器 8080

  docker run -itd --name tomcat_2 -p 8580:8080 daocloud.io/library/tomcat:9.0.0-jre8

  

3、拷贝项目包到容器根目录

  

4、移动后查看

  

 

5、拷贝项目包到容器:

  docker cp erp.war tomcat_2:/usr/local/tomcat/webapps

  验证是否拷贝进去了

  进入 tomc :docker exec -it tomcat_2 /bin/bash

  把项目 war 包放到 Tomcat 文件下 会自动解压 erp 文件夹  

  

 

6、erp 项目配置修改

/webapps/erp/WEB-INF/classes/application.yml

具体路径:/usr/local/tomcat/webapps/erp/WEB-INF/classes

这个文件可以修改数据库配置,只需要修改开发环境,以及日志文件地址

  

 

编辑配置文件 application.yml 发现没有 vi 命令

  1、可以在这里安装 vi 命令

  2、也可 在这里(容器)拷贝出来 修改后 在拷贝到容器里面,这样 容器里面就不需要安装 vi 命令

 

7、从容器中拷贝配置文件到宿主机器:$PWD(表示当前 路径)

docker cp tomcat_2:/usr/local/tomcat/webapps/erp/WEB-INF/classes/application.yml $PWD

  

 

8、修改项目配置:application.yml

使用 vim 命令未找到命令:说明为安装 vim 命令

yum install vim -y

vi 和 vim 的区别:vim 有颜色,vi 是系统自带的

  

开发者节点数据库配置修改

  1. ip 为宿主机 ip
  2. 端口为 mysql 容器映射给宿主机的端口
  3. 修改数据库账号密码

  

 

9、从宿主机拷贝修改后的文件到容器:

docker cp application.yml tomcat_2:/usr/local/tomcat/webapps/erp/WEB-INF/classes/application.yml

 

10、修改后需要重启容器:Tomcat_2  

docker restart tomcat_2

  

 

11、创建数据库 erp 表(上面已经创建了,省略

12、验证项目:jmeter

方法1:查看 logs 文件夹中的日志

方法2:通过接口工具调接口

  jmeter 验证注册接口请求成功

  

  在数据库中查看表中是否存在数据

  

 

创建第二个 Tomcat 容器:

1、使用这个镜像创建容器 8080

docker run -itd --name tomcat_3 -p 8680:8080 daocloud.io/library/tomcat:9.0.0-jre8

2、拷贝项目包到容器:

docker cp erp.war tomcat_3:/usr/local/tomcat/webapps

3、从宿主机拷贝修改后的文件到容器:

docker cp application.yml tomcat_3:/usr/local/tomcat/webapps/erp/WEB-INF/classes/application.yml

4、修改后需要重启容器 Tomcat_2  

docker restart tomcat_3

 

验证项目:

方法1:查看 logs 文件夹中的日志

方法2:通过接口工具调接口

  jmeter 验证注册接口请求成功;以写入数据库

   

   在数据库表中查看数据是否存在

   

 

nginx 基础

nginx 是一个高性能性能的HTTP和反向代理web服务器

    主要用途:
    • web服务器
    • 反向代理
    • 负载均衡

Docker 安装 nginx;实现容器间关联搭建Tomcat

下载镜像:https://hub.daocloud.io/

  先拉取镜像:docker pull daocloud.io/library/nginx:1.13.0-alpine

  在创建 nginx 容器:docker run -itd --restart always --name docker-nginx -p 80:80 daocloud.io/library/nginx:1.13.0-alpine

  

现在我们存在两个公司 Tomcat 项目,想要配置为集群;

需要修改 nginx 配置文件

 

nginx 容器配置:

1、从nginx 容器中拷贝配置文件到宿主机

docker cp docker-nginx:/etc/nginx/nginx.conf $PWD

2、修改 nginx.conf 文件

  网盘链接:https://pan.baidu.com/s/1oMtiAZ11vi747iQ8inKaPA 提取码:7yaw

先把网盘中修改好的配置文件,放到Linux环境根目录下,已经移动到root下

  

  

  

  有两个 Tomcat 服务和在一起,修改 ip + 端口号 向外映射;

  weight = 1:这两个服务的平均负载均衡,平均分配

 

3、拷贝修改后的 nginx.conf  文件到容器中

docker cp nginx.conf docker-nginx:/etc/nginx/nginx.conf

4、重启动 nginx 容器

docker restart docker-nginx

   

5、验证项目接口:

方法1:查看 logs 文件夹中的日志

方法2:通过接口工具调接口;更改端口80

  jmeter 验证注册接口请求成功;以写入数据库

  

   查看数据库表中是否添加数据

  

 

集群测试

常用步骤

创建第1个 tomcat 容器与 mysql 数据库关联:

docker run -itd --name tomcat4 -p 8084:8080 --link mysql57:mysql -v $PWD/logs4:/usr/local/tomcat/logstomcat:8.5.60

-v:转机,本地的某个路径或者某个文件,映射到我的容器里面的某一个路径或者某一个 文件下面去

拷贝项目包到容器

docker cp erp.war tomcat4:/usr/local/tomcat/webapps

修改项目配置:application.yml

    • 开发者节点数据库配置修改
      • ip为:mysql  
      • 端口为:mysql 默认端口3306  

从宿主机拷贝修改后的文件到容器:

docker cp application.yml tomcat4:/usr/local/tomcat/webapps/erp/WEB-INF/classes/application.yml

重启动tomcat1容器

docker restart tomcat4

1、下载镜像:

需要 Tomcat 镜像、及安装好的 MySQL 数据库

  

 

 

 

2、创建 Tomcat 容器

换其他路径 进行安装 opt

docker run -itd --name tomcat_4 -p 8780:8080 -v $PWD/logs4:/usr/local/tomcat/logs --link aaa_mysql_577:mysql575 daocloud.io/library/totomcat:9.0.0-jre8

docker run -itd --name tomcat容器名称 -p 映射到本地端口:8080 -v 当前 Tomcat 日志地址logs,映射到本地的logs4路径下面去 --link 数数据库容器名称:数据库别名 Tomcat镜像地址:Tomcat版本号

--link :在 Tomcat 容器 与 MySQL 容器之间建立链接,把两个容器创建成一个局域网,都放在一个区域

  

 

   

   日志文件位置

  

查看日志:tailf catalina.2020-12-25.log

实时查看日志:tailf -f catalina.2020-12-25.log

查看日志文件:vim catalina.2020-12-25.log

 

2、配置文件拷贝当前路径

项目包放进去

 

 

   配置文件需要拷贝 出来

 

docker cp  tomcat_4:/usr/local/tomcat/webapps/erp/WEB-INF/classes/application.yml $PWD

修改配置文件:

  vim application.yml

  使用别名 mysql4,不用改端口(因为是两个容器与容器之间的局域网,已经在一起了,没有通过宿主机)

  修改账号root 密码 root123456

  

3、从宿主机拷贝修改后的文件到容器

docker cp application.yml tomcat_4:/usr/local/tomcat/webapps/erp/WEB-INF/classes/application.yml

4、修改后需要重启容器 Tomcat_4

docker restart tomcat_4

 

然后去 logs4 查看日志

查看日志:tailf catalina.2020-12-25.log

实时查看日志:tailf -f catalina.2020-12-25.log

查看完整日志文件:vim catalina.2020-12-25.log

  

  

 

1、使用这个镜像创建容器 8080

docker run -itd --name tomcat_5 -p 8880:8080 -v $PWD/logs5:/usr/local/tomcat/logs --link aaa_mysql_577:mysql575 daocloud.io/library/tomcat:9.0.0-jre8

2、拷贝项目包到容器:

docker cp erp.war tomcat_5:/usr/local/tomcat/webapps

3、修改后的application.yml 配置文件,从宿主机拷贝修改后的文件到容器:

docker cp application.yml tomcat_5:/usr/local/tomcat/webapps/erp/WEB-INF/classes/application.yml

把这个application文件拷贝到这个容器Tomcat5

4、修改后需要重启容器 Tomcat_5

docker restart tomcat_5

5、然后去 logs5 查看日志

查看日志:tailf catalina.2020-12-25.log

实时查看日志:tailf -f catalina.2020-12-25.log

查看完整日志文件:vim catalina.2020-12-25.log

  

   

 

Docker安装nginx

下载镜像:

docker pull daocloud.io/library/nginx:1.13.0-alpine

创建 nginx 容器:

docker run -itd --restart always --name docker-nginx2 --link tomcat4:tomcat4 --link tomcat5:tomcat5 -p 8980:80 daocloud.io/library/nginx:1.13.0-alpine

配置 nginx 创建集群

  docker run -itd --restart always --name docker-nginx2 --link tomcat_4:tomcat4 --link tomcat_5:toncat5 -p 8888:80 daocloud.io/library/nginx:1.13.0-alpine

  

  复制 nginx.conf  到 opt 目录下:cp nginx.conf /opt/

 

  在 opt 目录下 修改配置:vim nginx.conf

   

nginx 容器配置:

基本配置步骤:

1从 nginx 容器中拷贝配置文件到宿主机

docker cp docker-nginx2:/etc/nginx/nginx.conf $PWD

2修改 nginx.conf 文件

3拷贝修改后的 nginx.conf 文件到容器中

docker cp nginx.conf docker-nginx2:/etc/nginx/nginx.conf

4重启动 nginx 容器

docker restart nginx

 

 

  

拷贝 配置文件 到 容器里面

docker cp nginx.conf docker-nginx2:/etc/nginx/nginx.conf

重启动 nginx 容器

docker restart nginx

  

 

 

接口验证:

  

 

 

nginx 为什么要使用 --link

1、如果 没有使用link 那么数据就要消耗宿主机的 IO;不使用 nginx IO 就要消耗的大一些,同时它的内存也要消耗的大一些;随意这样就会导致我的

宿主机相对而言性能要大一些,也就是说最终的性能不是理想;;;;;而使用了 --link 之后,就不会消耗额外的资源了,它的性能就要更好一些,

2、不管请求的数据是多还是少;比如说:请求的报文只有 1kb ,但是我进入容器,然后又出来回到宿主机,那内存里面就要存在 这个2 kv 的数据大小

我的宿主机内存先要有这个数据,然后进入到里面去,从 nginx 里面在出来,又回到宿主机,那宿主机要接受这个数据,接受这个数据,

在进入 Tomcat 这个容器里面去,我的内存消耗就要大一些

宿主机同样的硬件的配置,使用了 --link 方式,来链接容器,它的性能、速度都会要快很多;;

 

 

因为他们几个 组成局域网访问的速度比较快

 

nginx 本来就是做负载均衡的,nginx 要配置负载均衡的时候,配置的是宿主机的 IP 和宿主机的端口

数据流向:比如用户发过来一个请求 到了 nginx, nginx 机器先从外面 进入 nginx 容器里面去,你告诉它要找的是宿主机的 ip,又要回到 宿主机;

再从宿主机看到宿主机的端口,在进入另一个容器里去;

 

如果用第一种方法 ,不适用 link ;一个访问我的数据库,访问我的网卡,进入到我的服务器里面来了;

就会进入到,因为有一个80 的端口,找到宿主机的 80 端口;宿主机的80端口我就会进入到 nginx 这个容器里面去,

nginx 这个容器里面发现它要找的 ip 地址,是我宿主机的 ip地址 和 宿主机的端口;要从 nginx 容器里面出来,

进入到我的宿主机,找到了这个端口,在进入 Tomcat 容器里面去        它转了一个弯

 

如果是 link :用户来访问一个请求,从宿主机的网卡进入到宿主机,找到了nginx 的端口,就会进入到 nginx 这个容器里面;

发现 它是一个 内部局域网、容器局域网;容器局域网里面,容器里面它要找的是 容器的别名;直接通过这个找到我的另外一个容器,在容器局域网里面找到了我的另外一个容器;进入到另外一个容器里面,由另外一个容器处理了在出来;   可以少走弯路

 

我的数据流至少再从容器里面出来一次,进入到宿主机,宿主机在进入到容器

性能的话语就是:首先你的 IO 、速度换入换出要跟少了;首先进入到容器里面,在出来,在进入容器里面去 有很多IO 数据换入换出;

使用link了之后,直接进入 容器里面,我在容器的局域网里面,进行数据的交换,这样就可以不消耗宿主机的 IO;

 

 

*******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/shouhu/,谢谢!!*******