Docker安装ElasticSearch

一、使用Docker的ElasticSearch镜像

前置技能是学会Docker使用,这里就不具体说Docker如何使用了,默认读者掌握了Docker技能

1、查看Docker仓库中的ElasticSearch

首先查看Docker仓库中的ElasticSearch,选用自己要用的elaseticsearch

[root@iZ1ejkkkxu2looZ ~]# docker search elasticsearch

2、拉去镜像到本地

选用自己要用的版本,下载到本地

[root@iZ1ejkkkxu2looZ ~]# docker pull elasticsearch

这里由于我之前已经下载了7.6.1的版本,有部分镜像文件就不需要下载了。并且这个作为演示,就没有写版本号,自动下载最新版。

各位同学如果要下载指定版本,记得 elasticsearch:版本号

检查一下,镜像已经被下载好了

3、运行镜像

运行镜像的时候,要记得指定运行环境,因为elaticsearch的默认占用内存是1G,而我的这个小学生机只能最多也就1G的空间,要是打开那绝对当场暴毙。需要ES_JAVA_OPTS=-Xms512m -Xmx512m 指定占用内存

另外还需要指定discovery.type=single-node

docker run -it --name myes -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" 5acf0e8da90b

这样就启动起来啦~

通过http://ip:9200 进行访问也是可以的~

二、配置跨域

其实配置跨域还是比较简单的,仅需要修改一下config文件夹中的elasticsearch.yml文件的参数即可,但是在docker的镜像中修改却有些问题,原因在于官方提供的镜像是没有vim的,无法进行文件修改。

对此,我们有两种办法解决。

方法1

当我们在容器中使用 vim指令时,会得到

root@3961c96d3af4:/usr/share/elasticsearch# ls
NOTICE.txt  README.textile  bin  config  data  lib  logs  modules  plugins
root@3961c96d3af4:/usr/share/elasticsearch# cd config
root@3961c96d3af4:/usr/share/elasticsearch/config# vim elasticsearch.yml 
bash: vim: command not found

既然容器中没有vim,那么我们就自己下载一个即可。

可是怎么下载呢?

当我第一次安装的时候,网上搜了很多,说是使用apt-get updateapt-get vim命令即可,但是我输入的时候却提示没有该命令。后来搜到说centos的软件安装工具不是apt-get而是yum,于是我尝试了下yum vim结果成功了!

不过在我演示的时候,下了最新版的elasticsearch,却发现apt-get命令可以使用了,人都傻了,容器的底层操作系统都给换了吗???不明白。

更新好vim后,即可进入elastcsearch.yml进行操作。

cluster.name: "qfcwx-cluster"   
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"

一、二行的应该是本来就有的,而三、四行是我们自己加的。

第三行的意思是设置允许跨域,第四行的意思是允许所有的网址跨域请求,*是通配符嘛。

就此,我们的跨域也就配置好了。

方法2

使用容器数据卷来共享数据,在容器外修改以达到修改的目的。

我们要挂载的就是config/elasticsearch.yml文件。

# 0、现在宿主机上创建好对应的文件。
touch elasticsearch.yml
# 1、使用命令在run容器的时候挂载数据卷 -v命令挂载数据卷
docker run -d --name myes_v05 -p 9203:9200 -p 9303:9300 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -v /home/myEs02/elastcsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml   5acf0e8da90b
# 2、然后在宿主机上进行相应的修改
vim elasticsearch.yml
输入:
cluster.name: "qfcwx-cluster"   
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
# 3、编辑好了之后 运行docker即可
docker start  ad82d782f79a

大功告成!!

这里得着重说一下这里有几个坑点。

由于我对docker不是很熟悉,所以犯了很多错误。在这里写出来,希望大家能引以为戒。

坑点1:

一开始我没有做第0步,就是直接执行docker run的语句,结果报错了。

docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"/home/myEs03/elastcsearch.yml\\\" to rootfs \\\"/var/lib/docker/overlay2/ebdec218f44d495d05b5f265745fec5e53c57a1e3d43858f5f338d92a52ccc34/merged\\\" at \\\"/var/lib/docker/overlay2/ebdec218f44d495d05b5f265745fec5e53c57a1e3d43858f5f338d92a52ccc34/merged/usr/share/elasticsearch/config/elasticsearch.yml\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.

对这个结果我很疑惑为什么会这样呢?看了错误提示,他说试图将目录挂载到文件上,我有些蒙蔽,我明明是制定了.yml文件的呀!

然后我就去了相应目录看了

结果是这样的。按道理说结合上面的错误提示和这个蓝色的标识,我就应该想到这个.yml文件其实是一个文件夹!

然而由于我对linux不熟悉,还以为文件就是这样的,然后又在网上查啊查,查了好久才发现,我这个.yml是个文件夹!不得不说太具有迷惑性了。。。我怪我自己对linux系统太不熟悉,以至于搞出这样的笑话。

于是我touch了一个正常的yml,这才不报这个错误,然而又一个错误不期而至。

坑点2:

解决了坑点1之后,我就准备看看运行成功后的结果啦,然而事情又有波折。

再次报错:

[2020-06-13T08:19:44,278][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: unknown setting [uster.name] did you mean [clust
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-5.6.12.jar:5.6.12]
	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123) ~[elasticsearch-5.6.12.jar:5.6.12]
	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:70) ~[elasticsearch-5.6.12.jar:5.6.1
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) ~[elasticsearch-5.6.12.jar:5.6.12]
	at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-5.6.12.jar:5.6.12]
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[elasticsearch-5.6.12.jar:5.6.12]
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.6.12.jar:5.6.12]
Caused by: java.lang.IllegalArgumentException: unknown setting [uster.name] did you mean [cluster.name]?
	at org.elasticsearch.common.settings.AbstractScopedSettings.validate(AbstractScopedSettings.java:293) ~[elasticsearch-5.6.
	at org.elasticsearch.common.settings.AbstractScopedSettings.validate(AbstractScopedSettings.java:256) ~[elasticsearch-5.6.
	at org.elasticsearch.common.settings.SettingsModule.<init>(SettingsModule.java:139) ~[elasticsearch-5.6.12.jar:5.6.12]
	at org.elasticsearch.node.Node.<init>(Node.java:344) ~[elasticsearch-5.6.12.jar:5.6.12]
	at org.elasticsearch.node.Node.<init>(Node.java:245) ~[elasticsearch-5.6.12.jar:5.6.12]
	at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:233) ~[elasticsearch-5.6.12.jar:5.6.12]
	at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:233) ~[elasticsearch-5.6.12.jar:5.6.12]
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:342) ~[elasticsearch-5.6.12.jar:5.6.12]
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) ~[elasticsearch-5.6.12.jar:5.6.12]
	... 6 more

核心的报错是unknown setting [uster.name] did you mean [clust

经过研究后发现,可能是我的空格引起的,yml中的配置我是直接复制的,可能我的文本编辑环境的空格和linux的空格不一样,所以产生这种情况。

我再次打开yml文件,将里面的空格重新输入了一遍就解决了这个问题!

坑点3:

解决了坑点2之后,我就准备看看运行成功后的结果啦,然而事情又有波折。

我在执行docker run之后,又报了错误。

ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

这次的报错也简单易懂,拥有的内存分配太少了

但是我不知道为什么会这样,之前运行都是直接运行的,从来没有报过这种错误。有没有大佬能告诉下为什么会这样呢?

不过这个报错还好解决,百度了下,只需要设置一下即可。

切换到root用户
执行命令:
sysctl -w vm.max_map_count=262144
查看结果:
sysctl -a|grep vm.max_map_count
显示:
vm.max_map_count = 262144

三个坑点解决之后,我就成功运行起了elasticsearch!

大功告成~

NICE!

版权声明:本文为wu199723原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wu199723/p/13118390.html