1、学习一门新技术的步骤方法
1、学习一门新技术时,只需要先把它用起来
2、把使用过程中解决的问题,及时记录、总结
目录
1、Linux
1、Linux的基本命令
2、Docker
1、安装Docker
6、自定义镜像
7、docker-compose
1、springboot
1、src目录
2、常用注解
3、热加载
2、SpringCloud
1、SpringCloud介绍
1、微服务架构只是一个样式,或一个风格
2、SpringCloud是微服务架构落地的一套技术栈
2、服务的注册与发现-Eureka
3、服务间的负载均衡-Robbin
4、服务间的调用(通讯)-Feign
5、服务的隔离及断路器-Hystrix
6、服务网关-Zuul
7、服务间消息传递-Stream
8、服务的动态配置-Config
9、服务的追踪-Sleuth
1、学习一门新技术的步骤方法
1、学习一门新技术时,只需要先把它用起来
2、把使用过程中解决的问题,及时记录、总结
如果想虚拟机固定ip:就选择桥接模式,参考配置:https://blog.csdn.net/qq_40694145/article/details/82811961
配置完然后重启network:systemctl restart network.service
安装xshell拖拽上传命令:yum -y install lrzsz
2、简单介绍
Nginx:解决用户请求平均分发
Redis:解决数据共享并实现缓存功能
ElasticSearch:解决搜索数据的功能
3、微服务架构也是分布式架构
微服务架构,在分布式架构的基础上再次拆分
Dubbo:阿里的,RPC通讯方式
SpringCloud:HTTP通讯方式
Eureka注册中心:管理所有服务信息(协议://ip:端口/路径)
Robbin:服务之间的负载均衡
Hystrix:服务降级
MyCat:数据库的分库分表
4、mysql数据库一张表的数据达到500万条以上时,速度明显下降
1、分布式事务解决方法:RabbitMQ、LCN方式
2、分布式是锁解决方法:Redis、Zookeeper
3、分布式任务解决方法:Redis+Quartz或者Elastic-Job
1、Linux和Windows的区别
1、Linux是严格区分大小写的,Windows无所谓
2、Linux中一切皆是文件
3、Linux中文件是没有后缀的
有后缀的只是约定俗成的。eg:tar、tar.gz、conf
4、Windows下的软件一般无法直接运行在Linux中
1、Linux的目录结构
Windows的目录结构石带有盘符的。eg:C:、D:
而Linux中是没有盘符的
2、查看顶级目录:ls /
Linux的常用目录
root:系统管理员的HOME目录
bin:这个目录下放着经常使用的命令
boot:存放的是启动Linux时的一些核心文件
etc:存放系统管理所需要的配置文件、子目录
home:普通用户的HOME目录
usr:默认安装软件的目录,类似于Windows的Program Files目录
opt:是主机额外安装软件拜访的目录
命令的基本格式:命令 [选项] [参数]
有些命令不遵循这个格式,eg:
我是谁:who am i
我在哪:pwd
查看ip地址:ip addr
清屏:clear
ping地址:ping 地址
强制停止:Ctrl + C
1、目录命令
Linux中的隐藏文件是以.开头的,当前目录使用.表示,上一级目录使用..表示
1、列出目录:ls [-ald] [目录名]
2、切换目录:cd 具体路径 | 特殊符号
3、创建目录:mkdir [-p] 目录名
-p:代表创建多级目录时使用
4、删除目录
只删除空目录:rmdir 目录名
删除非空目录:rm [-rf] 目录名
-r:代表递归删除目录下的全部内容
-f:不询问,直接删除
5、复制目录:cp -r 来源目录 目标目录
-r:递归复制全部内容,复制时必须加这个选项
6、移动、重命名目录
mv 目录名 新目录名 | 路径
如果第二个参数指定的路径不存在,就是重命名
如果第二个参数的路径存在,就是移动
2、文件命令
1、创建文件:touch 文件1 文件2...
2、编辑文件
进入查看模式:vi 文件名
进入编辑模式:i | a | o
退出编辑模式:Esc
从查看模式进入到底行命令模式::
在底行命令模式,输入wq:表示保存并退出
输入q!:表示不保存并退出
在查看模式:摁ZZ,可以快速保存并退出(注意:是大写的ZZ)
3、查看文件
从第一行开始查看文件内容,展示全部:cat 文件名
从最后一行开始展示:tac 文件名
显示文件时,展示行号:nl 文件名
查看大文件时,可以一页一页的向下翻(只能向下翻):more 文件名
摁space向下翻页,退出时摁q
查看大文件时,可以任意的向上或者向下翻:less 文件名
向上翻页:PageUp
向下翻页:PageDown
一行一行翻:↑↓
只看前几行:head 文件名
只看后几行:tail 文件名
监控日志:tail -f 文件名
4、移动、重命名文件:mv 文件名 新文件名 | 路径
5、复制文件:cp 文件名 目录
6、删除文件:rm [-f] 文件名
-f:是否询问
3、压缩包命令
1、针对tar类型命令
1、解压:tar [-zxvf] 压缩包名称 [-C 路径]
-z:代表压缩包后缀是.gz的
-x:代表解压
-v:解压时,打印详细信息
-f:代表指定文件名称【-f选项必须放在所有选项的最后】
-C 路径:代表将压缩包内容解压到指定路径
2、打包:tar [-zcvf] 压缩包名称 文件1 文件2 目录1 目录2...
-c:代表打包
2、针对zip类型命令
需要先安装软件:
安装打包程序:yum -y install zip
安装解压程序:yum -y install unzip
1、解压:unzip 压缩包名称
2、打包:zip 压缩包名称 文件1 文件2 目录1 目录2...
4、用户的操作
1、用户的创建:useradd [-cgd] [选项指定的具体内容] 用户名
-c:comment,给用户添加一段注释
-g:group,指定用户所在组
-d:代表指定用户的HOME目录
2、设置用户密码:passwd 用户名
3、切换用户:su 用户名
3、删除用户:userdel [-r] 用户名
-r:代表删除用户的同时,删除该用户的HOME目录
4、修改用户:usermod [-cgd] [选项指定的具体内容] 用户名
5、用户组的操作
1、创建用户组:groupadd 用户组名
2、修改用户组:groupmod [-n] [选项指定的具体内容] 用户组名
-n:代表修改用户组名称
3、删除用户组:groupdel 用户组名
只能删除不存在用户的用户组
6、文件权限的修改
1、对文件的权限修改:有2种方式
1、数字方式:chmod [-R] 777 文件 | 目录
rwx这3个权限的数字分别是:r:4,w:2,x:1
-R:当修改一个目录权限时,可以添加-R,将目录下的全部内容,都修改权限
2、符号方式:chmod [-R] a=rw 文件 | 目录
a:all,u:user,g:group,o:other
r:read,w:write,x:execute
赋予权限的方式:
添加:+,减掉:-,设定:=
-R:当修改一个目录权限时,可以添加-R,将目录下的全部内容,都修改权限
2、文件拥有者及所属组修改
1、修改文件的拥有者、所属组:chown [-R] 拥有者:所属组 文件 | 目录
2、修改文件的拥有者:chown [-R] 拥有者 文件 | 目录
3、修改文件的所属组:chgrp [-R] 所属组 文件 | 目录
7、Linux的其他操作命令
1、进程的操作
1、查看全部进程:ps -ef
2、查看全部正在运行的进程:ps -ef | grep 搜索的内容
eg:ps -ef | grep tomcat
3、杀死进程:kill -9 进程id
2、服务的操作
启动指定的服务:systemctl start 服务名称
停止指定的服务:systemctl stop 服务名称
重启指定的服务:systemctl restart 服务名称
开机自启动指定的服务:systemctl enable 服务名称
禁止开机自启动指定的服务:systemctl disable 服务名称
查看服务状态:systemctl status 服务名称
3、端口号查看
先安装工具,才能使用:yum -y install net-tools
查看端口号占用情况:netstat -naop | grep 端口号
4、访问地址:curl 访问地址
5、查找文件:find 路径 -type f | grep profile
课件资料文件名是:4.3 Linux教程_UNIX操作系统_千锋2020最新版 源码+课件+软件+资料
1、Linux安装JDK:https://www.bilibili.com/video/BV1gC4y1p7z2?p=976
2、Linux安装Tomcat:https://www.bilibili.com/video/BV1gC4y1p7z2?p=978
3、Linux安装Mysql:https://www.bilibili.com/video/BV1gC4y1p7z2?p=977
网易的docker学习笔记:https://blog.csdn.net/pyl574069214/article/details/105593946
课件目录:4.4 2020最新版_Docker视频_应用容器引擎【千锋】源码+课件+软件+资料
1、下载Docker依赖的环境:yum -y install yum-utils device-mapper-persistent-data lvm2
2、指定Docker镜像源:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装Docker
安装缓存:yum makacache fast
安装Docker服务:yum -y install docker-ce
4、启动Docker
启动Docker服务:systemctl start docker
设置开机自启动:systemctl enable docker
测试:docker run hello-world
2、Docker的中央仓库
1、docker的官方中央仓库:https://hub/docker.com
这个仓库是镜像最全的,在国外,下载速度较慢
2、国内的镜像网站【下载速度快,但镜像相对不全】
1、网易蜂巢:https://c.163yun.com/hub#/home
这个是需要登录的
2、daoCloud【推荐】:http://hub.daocloud.io/
这个是不需要登录的,直接搜索就可以了
3、国内的镜像网站
如果使用公司内部私服的方式拉取镜像,需要添加配置
1、需要在/etc/docker/daemon.json中添加如下配置:
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["公司私服的ip:port"]
}
2、重启两个服务
重新加载文件:systemctl daemon-reload
重启docker:systemctl restart docker
3、镜像的操作
1、拉取镜像:docker pull 镜像名称[:tag]
eg:docker pull dacloud.in/library/tomcat:8.5.15-jre8
2、查看本地全部镜像:docker images
3、删除本地镜像:docker rmi 镜像的id
4、镜像的导入导出:
4、容器的操作
1、运行容器
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像的id | 镜像名称[:tag]
-d:代表后台运行容器
-p 宿主机端口:容器端口:将容器的端口映射到宿主机的端口,让其他机器可以通过ip+端口访问到容器
如果是这种情况:Windows中安装虚拟机Linux,在虚拟机中安装docker, 那宿主机就是Linux
--name 容器名称:指定容器名称
2、查看正在运行的容器:docker ps [-qa]
-a:查看全部的容器,包括没有运行的
-q:只查看容器的id
3、查看容器的日志:docker logs -f 容器id
-f:可以滚动查看日志的最后几行
4、进入容器内部:docker exec -it 容器id bash
5、复制内容到容器:docker cp 文件名称 容器id:容器内部路径
将宿主机的文件复制到容器内部的指定目录,eg:
docker cp ssm.war fe:/usr/local/tomcat/webapps/
6、重启、启动、停止、删除容器
重启容器:docker restart 容器id
启动已停止运行的容器:docker start 容器id
停止容器:docker stop 容器id
停止全部容器:docker stop ${docker ps -qa}
删除容器:docker rm 容器id
删除全部容器:docker rm ${docker ps -qa}
5、数据卷的使用
1、创建数据卷:docker volume create 数据卷名称
创建数据卷之后,默认会存放在一个目录下:/var/lib/docker/volumes/数据卷名称/_data
2、查看数据卷详情
docker volume inspect 数据卷名称
3、查看全部数据卷:docker volume ls
4、删除数据卷:docker volume rm 数据卷名称
5、容器映射到数据卷:两种方式
1、通过数据卷名称映射:docker run -v 数据卷名称:容器内部的路径 镜像id
2、通过路径映射【推荐】:docker run -v 路径:容器内部的路径 镜像id
1、创建Dockerfile文件
创建自定义镜像就需要创建一个Dockerfile文件,
eg:制作SSM容器镜像,文件内容如下:
from dacloud.in/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps
Dockerfile文件内的命令说明:
from:指定当前自定义镜像依赖的环境(依赖于中央仓库哪个镜像)
copy:将相对路径下的内容复制到自定义镜像中
workdir:声明镜像的默认工作目录
run:执行的命令,可以编写多个
cmd:需要执行的命令(在workdir下执行的,cmd可以写多个,但只会执行最后一个)
2、通过Dockerfile制作镜像
docker build -t 镜像名称[:tag] .
1、为什么要使用docker-compose?
1、之前运行一个镜像,需要添加大量的参数
eg:docker run -d -p 8080:8080 --name ssm_tomcat -v /opt/volume_ssm_tomcat:/usr/local/tomcat/webapps dacloud.in/library/tomcat:8.5.15-jre8
可以将这些参数放到docker-compose.yml文件中
2、docker-compose可以批量管理容器【一个docker-compose.yml可以编写多个镜像配置】
2、安装docker-compose
1、下载docker-compose
在https://github.com/中搜索docker-compose,选择most starts,就可以看到第一个就是docker/compose,点击docker/compose进去后,选择发行版本releases,再点击tags,找到1.24.1版本
下载1.24.1版本的docker-compose:https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64
2、设置权限
修改文件名称:mv docker-compose-Linux-x86_64 docker-compose
设置文件执行权限:chmod 777 docker-compose
3、配置环境变量
将docker-compose文件移动到/usr/local/bin:mv docker-compose /usr/local/bin
修改环境变量,在文件末尾添加:export PATH=$JAVA_HOME:/usr/local/bin:$PATH
vi /etc/profile
重新加载配置:source /etc/profile
就可以在任意目录下运行:docker-compose
3、docker-compose管理Mysql、Tomcat容器
注意事项:
1、yml文件以key:value方式来指定配置信息
2、多个配置信息以换行、缩进的方式来区分
3、在docker-compose.yml文件中,不要使用制表符
4、使用docker-compose命令管理容器
在使用docker-compose命令时,是在当前目录下找docker-compose.yml文件
1、启动管理的容器:docker-compose up -d
2、关闭并删除容器:docker-compose down
3、开启容器:docker-compose start
关闭容器:docker-compose stop
重启容器:docker-compose restart
4、查看docker-compose管理的容器:docker-compose ps
5、查看日志:docker-compose logs -f
5、docker-compose配合Dockerfile使用
1、编写docker-compose.yml文件
2、编写Dockerfile文件
3、运行
1、CI介绍
CI:continuous intergration持续集成
将代码提交到git上,就自动的完成项目的重新构建、打包、运行、测试。[gitlab、Gitlab-Runner就可以实现这个功能]
2、搭建Gitlab服务器
1、准备工作
1、虚拟机至少知道4G运行内存
2、安装Docker、docker-compose
2、修改ssh的22端口
将ssh的默认22端口,修改为60022端口,因为Gitlab需要占用22端口
vi /etc/ssh/sshd_config
找到:PORT 22,将22改为60022
重启:systemctl restart sshd
3、编写docker-compose.yml
文件详解讲解视频:https://study.163.com/course/courseLearn.htm?courseId=1209432891#/learn/video?lessonId=1279501136&courseId=1209432891
version: '3.1'
services:
gitlab:
image: 'twang2218/gitlab-ce-zh:11.1.4'
container_name: "gitlab"
restart: always
privileged: true
hostname: '192.168.3.20'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.3.20'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['smtp_enable'] = true
gitlab_rails['gitlab_shell_ssh_port'] = 22
ports:
- '80:80'
- '443:443'
- '22:22'
volumes:
- /opt/docker_gitlab/config:/etc/gitlab
- /opt/docker_gitlab/data:/var/opt/gitlab
- /opt/docker_gitlab/logs:/var/log/gitlab
4、启动容器(第一次下需要很久,大概要下1个G)【我这里安装失败了,镜像拉取不下来】:docker-compose up -d
启动的速度也是很慢的,可以用查看logs:docker-compose logs -f
https://www.bilibili.com/video/BV1gC4y1p7z2?p=996
3、搭建Gitlab-Runner
按照如下步骤操作
https://www.bilibili.com/video/BV1gC4y1p7z2?p=997
### 一. 准备环境
- 复制`daemon.json`到`/etc/docker/`,并执行`systemctl daemon-reload`,`systemctl restart docker`
- 创建工作目录 `/opt/docker_gitlab-runner`
- 将提供好的`docker-compose.yml`文件以及`environment`目录全部复制到上述目录中
- 在宿主机启动docker程序后先执行 `sudo chown root:root /var/run/docker.sock` (如果重启过 docker,重新执行)
- 在`/opt/docker_gitlab-runner` 目录中执行`docker-compose up -d --build` 启动容器【要运行很久,如果网络不好是运行不起来的】
- 【容器启动成功后,再执行这个】添加容器权限,保证容器可以使用宿主机的docker`docker exec -it gitlab-runner usermod -aG root gitlab-runner`
- 注册Runner信息到gitlab
```sh
docker exec -it gitlab-runner gitlab-runner register
# 输入 GitLab 地址
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.199.109/
# 输入 GitLab Token
Please enter the gitlab-ci token for this runner:
1Lxq_f1NRfCfeNbE5WRh
# 输入 Runner 的说明
Please enter the gitlab-ci description for this runner:
可以为空
# 设置 Tag,可以用于指定在构建规定的 tag 时触发 ci
Please enter the gitlab-ci tags for this runner (comma separated):
deploy
# 这里选择 true ,可以用于代码上传后直接执行(根据版本,也会没有次选项)
Whether to run untagged builds [true/false]:
true
# 这里选择 false,可以直接回车,默认为 false(根据版本,也会没有次选项)
Whether to lock Runner to current project [true/false]:
false
# 选择 runner 执行器,这里我们选择的是 shell
Please enter the executor: virtualbox, docker+machine, parallels, shell, ssh, docker-ssh+machine, kubernetes, docker, docker-ssh:
shell
```
4、测试
https://www.bilibili.com/video/BV1gC4y1p7z2?p=998
4、CD介绍
CD包含两个部分:持续交付、持续部署
持续交付:将代码交付给测试团队
持续部署:将指定的版本代码部署到生产环境【Jenkins可以实现这个功能】
5、安装Jenkins【老师的Jenkins与gitlab是两个ip,也就是两个虚拟机】
https://www.bilibili.com/video/BV15e411W75G?p=1
Jenkins官网:https://www.jenkins.io/
1、编写docker-compose.yml
在opt目录下创建目录:mkdir docker_jenkins
进入目录,创建data目录:mkdir data,并赋予权限:chmod 777 data,然后再编辑docker-compose.yml
启动容器:docker-compose up -d
查看日志:docker-compose logs -f
浏览器中访问:http://192.168.3.20:8888
6、配置Jenkins可以免密登录:生产环境、gitlab
1、jenkins连接生产环境(目录服务器)
https://www.bilibili.com/video/BV15e411W75G?p=2
2、jenkins免密登录gitlab
https://www.bilibili.com/video/BV15e411W75G?p=3
3、实现持续交付持续部署
https://www.bilibili.com/video/BV15e411W75G?p=7
https://www.bilibili.com/video/BV15e411W75G?p=8
https://www.bilibili.com/video/BV15e411W75G?p=97
@Configuration:代表当前类是一个配置类
@Bean:构建一个实例,放到spring容器中
@SpringBootApplication是一个组合注解
@SpringBootConfiguration:就是@Configuration,代表启动类就是一个配置类
@EnableAutoConfiguration:实现自动装配
1、Springboot工程启动时,运行一个SpringFactoriesLoader类
2、这个类会加载META-INF/spring.factories配置,只会加载pom中引入了
@ComponentScan
相当于
1、加入依赖
2、勾选build project automatically
3、修改完后,点击build>build projcet。build完成后,刷新就可以看到修改后的效果了
4、mybatis配置
https://www.bilibili.com/video/BV15e411W75G?p=106
指定xml的扫描路径、配置实体类别名的扫描包、字段有实体属性的映射配置(驼峰映射,eg:字段user_name映射到属性userName)
5、输出执行的sql语句
6、springboot整合pageHelper分页
https://www.bilibili.com/video/BV15e411W75G?p=107
按照视频操作一遍:https://www.bilibili.com/video/BV15e411W75G?p=109
中间的课程
先将springcloud学了:
https://www.bilibili.com/video/BV15e411W75G?p=140
(可以遵循,也可以不遵循,像RESTful)
https://martinfowler.com/articles/microservices.html
总结:将复杂臃肿的单体应用进行细粒度的划分,每个拆分出来的服务各自打包部署。
1、SpringCloud中的大多数技术都是基于Netflix公司的技术进行二次研发。
2、SpringCloud 的中文社区网站:http://springcloud.cn/
3、SpringCloud的中文网:http://springcloud.cc/
4、八个技术点:
Eureka:服务的注册与发现
Robbin:服务之间的负载均衡
Feign:服务之间的通讯
Hystrix:服务的线程隔离以及断路器(服务降级)
Zuul:服务网关
Stream:实现MQ的使用
Config:动态配置
Sleuth:服务追踪
Eureka就是帮助我们维护所有服务的信息,以便服务之间的相互调用
1、创建工程springcloud、创建eureka-server模块,并启动【单机版的eureka】:https://www.bilibili.com/video/BV15e411W75G?p=143
2、Eureka的细节
1、EurekaClient启动时,将自己的信息注册到EurekaServer上,EurekaServer就会存储EurekaClient的注册信息
2、当EurekaClient调用服务时,本地没有注册信息的缓存时,去EurekaServer中去获取注册信息。
3、EurekaClient会通过心跳的方式和EurekaServer进行连接。(默认30秒EurekaClient会发送一次心跳请求,如果超过了90秒,还没有发送心跳信息的话,EurekaServer就认为该EureClient宕机了,将该EurekaClient从注册表中移除)
4、EurekaClient每隔30s去EurekaServer获取注册表,如果有更新,就更新本地注册表
5、Eureka的自我保护机制,统计15分钟内,如果一个服务的心跳发送比例低于85%,EurekaServer就会开启自我保护机制
1、不会从EureServer中移除长时间没有收到心跳的服务。
2、EureServer还是可以正常提供服务的。
3、网络比较稳定时,EurekaServer才会开始将自己的信息被其他节点同步过去。
6、CAP定理
C:一致性;A:可用性;P:分区容错性
这3个特性在分布式环境下,只能满足2个,而且分区容错性在分布式环境下,是必须要满足的,只能在C、A之间进行权衡。
如果选择CP,保证了一致性,可能会造成系统一定时间内不可用,如果同步数据的时间比较长,造成的损失大。
Eureka是一个AP效果,高可用集群,Eureka集群是无中心,Eureka即便是有几个宕机,也不会影响使用;
因为不需要重新推举master,只是会导致一定时间内数据不一致
Robbin是实现服务与服务的负载均衡,Robbin属于客户端负载均衡
客户端负载均衡:在EurekaClient端实现的负载均衡
服务端负载均衡:在EurekaServer端实现的负载均衡(eg:Dubbo)
Robbin的4种负载均衡策略:
RandomRule:随机策略
RoundRobbinRule:轮询策略
WeightedResponseTimeRule:默认会采用轮询的策略,后续会根据服务的响应时间,自动给你分配权重
BestAvailableRule:根据被调用方,并发数最小的去分配
通过Feign,直接通过接口,就可以直接调用其他服务,不用在调用的地方写请求地址了。
Feign传递参数的方式
注意事项:
1、如果传递的参数,比较复杂,默认会采用POST的方式
2、传递单个参数时,推荐使用@PathVariable
如果比较参数比较多时,也可以采用@RequestParam,在@FeignClient对应的接口中记得要写value属性
3、传递对象时,统一采用json方式,添加@RequestBody
4、在@FeignClient对应的接口必须采用@RequestMapping
https://www.bilibili.com/video/BV15e411W75G?p=156
https://www.bilibili.com/video/BV15e411W75G?p=166
Zuul解决的问题
1、维护所有服务的ip、port,简化客户端访问方式
2、在Zuul进行认证、授权控制,避免在每一个服务中添加认证、授权
3、减轻成本;减轻服务拆分、合并的成本
4、将安全性校验统一放到Zuul
1、Zuul监控界面
https://www.bilibili.com/video/BV15e411W75G?p=167
3、ElasticSearch
ElasticSearch、kibana安装视频:https://www.bilibili.com/video/BV15e411W75G?p=56
如果elasticsearch没有启动,启动ElasticSearch:进入elasticsearch的docker-compose.yml所在目录,
然后执行:docker-compose up -d
ElasticSearch访问地址:http://192.168.3.20:9200/
kibana访问地址:http://192.168.3.20:5601