m1下利用dockerdesktop安装ELK
一、背景:公司有一个需求,就是将txt中的数据加载到es中,之前没用过es,想着先在本地安装一个,然后再做测试。
二、安装docker desktop
打开docker的官网,下载苹果芯片的docker
网址:https://www.docker.com/
然后就是为了安装ELK的准备工作了
首先,把内存调大一些,要不然后续会有内存不足的问题
为了以后安装其他镜像文件也快一些,一般我们都用国内的镜像源,镜像源有很多,我用的是阿里云的镜像源,但是这个相对来说麻烦一些,需要先申请阿里云的镜像加速器
阿里云的网址:https://www.aliyun.com/
下面的是怎么找到自己申请的阿里云的镜像加速器
下面介绍一下docker desktop配置阿里云的镜像加速器
选择docker engine
增加内容如下;
"registry-mirrors": [
"你的专属阿里云镜像加速器地址"
]
注意:删除“experimental": false, 后的内容,并添加在其后。在"registry-mirrors"的上一行的末尾需要添加一个英文状态下的逗号,否则会提示有语法错误。
看看修改前和修改后的配置文件
修改前:
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"features": {"buildkit": true}
}
修改后:
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["你的专属阿里云镜像加速器地址"]
}
然后点击这个按钮,让配置文件修改生效
验证修改的配置文件是否生效?在终端下输入命令:docker info
显示出来你配置的阿里云镜像加速器地址则说明配置文件修改成功了
~/Downloads docker info ✔ base Py at 08:42:20
Client:Context: defaultDebug Mode: falsePlugins:buildx: Docker Buildx (Docker Inc., v0.10.4)compose: Docker Compose (Docker Inc., v2.17.2)dev: Docker Dev Environments (Docker Inc., v0.1.0)extension: Manages Docker extensions (Docker Inc., v0.2.19)init: Creates Docker-related starter files for your project (Docker Inc., v0.1.0-beta.2)sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc., 0.6.0)scan: Docker Scan (Docker Inc., v0.25.0)scout: Command line tool for Docker Scout (Docker Inc., v0.9.0)Server:Containers: 0Running: 0Paused: 0Stopped: 0Images: 0Server Version: 20.10.24Storage Driver: overlay2Backing Filesystem: extfsSupports d_type: trueNative Overlay Diff: trueuserxattr: falseLogging Driver: json-fileCgroup Driver: cgroupfsCgroup Version: 2Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 2456e983eb9e37e47538f59ea18f2043c9a73640runc version: v1.1.4-0-g5fd4c4dinit version: de40ad0Security Options:seccompProfile: defaultcgroupnsKernel Version: 5.15.49-linuxkitOperating System: Docker DesktopOSType: linuxArchitecture: aarch64CPUs: 6Total Memory: 23.45GiBName: docker-desktopID: 4K24:DB2B:6Y2C:UW6F:K62N:EXBN:K2GN:MRSB:DCQI:X457:JSNX:NWYEDocker Root Dir: /var/lib/dockerDebug Mode: falseHTTP Proxy: http.docker.internal:3128HTTPS Proxy: http.docker.internal:3128No Proxy: hubproxy.docker.internalRegistry: https://index.docker.io/v1/Labels:Experimental: falseInsecure Registries:hubproxy.docker.internal:5555127.0.0.0/8Registry Mirrors:你的专属阿里云镜像加速器地址Live Restore Enabled: false
docker常用命令汇总(没咋用过docker,以后慢慢更新)
命令 | 命令说明 |
---|---|
docker info | |
docker info | |
docker info | |
docker info | |
docker info | |
docker info | |
docker info | |
docker info |
三、docker desktop安装elasticsearch
然后在这里搜索arm64v8/elasticsearch找自己想要安装的版本
然后就是选择一个版本进行下载
选择好版本以后,就可以往下拉镜像文件了
下面的两种方式都可以
一、直接点击PULL
二、在终端下执行
docker pull arm64v8/elasticsearch:7.17.6
然后在终端下执行 docker images 显示如下;
docker images是查询镜像的意思
然后按照官网的说法,先创建一个网络
创建网络的目的就是利用这个网络实现es、kibanna、logstash容器之间的通信,也可以这么理解,相当于一个局域网,内网的开发环境(😄,先这么理解吧)
docker network create somenetwork
执行完显示如下;
571029f86e441b2e5f2d0b682345489943c0c696b2a44c6572b6e6a3f260c287
在终端下执行运行elasticsearch的命令
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.17.6执行完显示如下;Unable to find image 'elasticsearch:7.17.6' locally
7.17.6: Pulling from library/elasticsearch
Digest: sha256:6c128de5d01c0c130a806022d6bd99b3e4c27a9af5bfc33b6b81861ae117d028
Status: Downloaded newer image for elasticsearch:7.17.6
85cb69aec5e49f0156f461a13b65209cc8a58ccaf61e03fcdaf8526c211de829
执行参数说明
参数 | 参数说明 |
---|---|
-d | 后台运行容器 |
–name | 指定容器别名 |
–net | 连接指定网络 |
-p | (小写)映射端口号,主机端口:容器端口 |
-P | (大写)随机为容器指定端口号 |
-e | 指定启动容器时的环境变量 |
-v | 进行容器的挂载 |
–privileged=true | 使容器有权限挂载目录 |
可以查看elasticsearch的状态,命令:docker ps
~ docker ps ✔ took 21s base Py at 10:54:11
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
85cb69aec5e4 elasticsearch:7.17.6 "/bin/tini -- /usr/l…" 17 seconds ago Up 17 seconds 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch
最后去浏览器中输入:地址如下,则说明elasticsearch安装成功了
也可以这么验证:在终端下输入,curl http://localhost:9200
上面的这种方法安装倒是简单,但是数据容易丢失,所以一般我们进行安装时,都采用挂载的方式进行,将容器中的配置文件和数据目录都挂载到宿主机上
首先查看在docker容器内的配置文件在什么位置
docker exec -it elasticsearch /bin/bash //进入容器内部,看左面的用户就可以看出来了,原来是root,现在是一堆字符串了pwd:可以看到目前所在的目录
进入到config目录,就能看到容器内的配置文件位置了
该配置文件现在写的很简单
在本地新建es配置文件和数据文件要放的目录
我要创建挂载数据的位置
/Users/wuzhanxi/mac_soft/system_soft/code_environment //我本地的目录如下在上面的目录下新建
es_out_disk/elasticsearch //配置文件放的位置
es_out_disk/elasticsearch/data //数据存放的位置
将容器内
# 将容器内的配置文件拷贝到 /Users/wuzhanxi/mac_soft/system_soft/code_environment/es_out_disk/elasticsearch中#执行下面的命令
docker cp elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml /Users/wuzhanxi/mac_soft/system_soft/code_environment/es_out_disk/elasticsearch/# 修改文件权限
chmod 777 /Users/wuzhanxi/mac_soft/system_soft/code_environment/es_out_disk/elasticsearch/elasticsearch.yml //外部的配置文件需要有写的权限,我就配置成777了# 在elasticsearch 目录下再创建data目录(存放数据的目录),同时修改权限
chmod -R 777 /Users/wuzhanxi/mac_soft/system_soft/code_environment/es_out_disk/elasticsearch/data
注意:这里要修改文件的权限为可写,否则,进行挂载后,在外部修改配置文件,容器内部的配置文件不会更改。同时,创建 data 目录进行挂载。
运行容器如下
# 先删除旧的容器
docker rm -f es (删除这里写上容器的ID就可以)# 运行新的容器
docker run -d --name elasticsearch \\
--net somenetwork \\
-p 9200:9200 -p 9300:9300 \\
-e "discovery.type=single-node" \\
--privileged=true \\
-v $PWD/es_out_disk/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \\
-v $PWD/es_out_disk/elasticsearch/data/:/usr/share/elasticsearch/data \\
elasticsearch:7.17.6
注意:$PWD,在不同路径下,你的写法是不一样的,直接去掉也可以,写成全路径
下面演示一下,修改外部的配置文件,都有哪些地方会有变化
现在的配置文件只有这两行
cluster.name: "docker-cluster"
network.host: 0.0.0.0
我修改cluster.name为wzx-es
然后我重新启动这个容器,看看容器内部的配置文件是否发生了变化
docker exec -it elasticsearch /bin/bash //进入容器发现已经变化了
root@cceb1eae3509:/usr/share/elasticsearch/config# cat elasticsearch.yml
cluster.name: "wzx-es"
network.host: 0.0.0.0
然后去浏览器端访问,发现集群的名称也变化了,说明配置容器内部和外部的映射没有问题了
四、docker desktop安装kibana
安装方式跟es差不多
启动命令:在终端下执行
docker run -d --name kibana --net somenetwork -p 5601:5601 kibana:7.17.6
执行完显示如下;
Unable to find image 'kibana:7.17.6' locally
7.17.6: Pulling from library/kibana
Digest: sha256:ae5a501355903443b6cc7ff4a3af2dd76ba73f986d0612014b8370cd04bb6da8
Status: Downloaded newer image for kibana:7.17.6
67f5096b644fd38f8bcd9a659851e8ed1e2b895a9b87ed014ff4d5e99334c169
然后再验证下是否启动成功,docker ps,显示如下,成功启动起来了
~ docker ps ✔ took 39s base Py at 11:15:34
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
67f5096b644f kibana:7.17.6 "/bin/tini -- /usr/l…" 21 seconds ago Up 20 seconds 0.0.0.0:5601->5601/tcp kibana
85cb69aec5e4 elasticsearch:7.17.6 "/bin/tini -- /usr/l…" 21 minutes ago Up 21 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch
在浏览器端输入:localhost:5601,显示如下,则表示kibana安装成功了
五、docker desktop安装kibana
启动命令
docker run -d --name logstash --net somenetwork -p 4560:4560 logstash:7.17.6
执行完显示如下;
Unable to find image 'logstash:7.17.6' locally
7.17.6: Pulling from library/logstash
Digest: sha256:90a4cca2b81abef53a5ae17275d71dd928ed13de14c8ae00e3f0686baeb28e05
Status: Downloaded newer image for logstash:7.17.6
b986b6152aea825e02dd4ead1143c6d091a4dd47da87a1e1fb5a64b28c375edb
验证logstash是否启动成功,查看logstash的进程,命令:docker ps
~ docker ps ✔ took 21s base Py at 11:31:40
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b986b6152aea logstash:7.17.6 "/usr/local/bin/dock…" About a minute ago Up About a minute 5044/tcp, 0.0.0.0:4560->4560/tcp, 9600/tcp logstash
67f5096b644f kibana:7.17.6 "/bin/tini -- /usr/l…" 17 minutes ago Up 17 minutes 0.0.0.0:5601->5601/tcp kibana
85cb69aec5e4 elasticsearch:7.17.6 "/bin/tini -- /usr/l…" 39 minutes ago Up 39 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch