搜索ElasticSearch镜像
docker search elasticsearch
拉取镜像
docker pull docker.io/elasticsearch:版本号
拉取镜像的时候,可以指定版本,如果不指定,默认使用latest。
查看镜像
docker images
运行容器
docker run -d --name es2 -p 9200:9200 -p 9300:9300 --restart=always -e "discovery.type=single-node" elasticsearch
通过镜像启动容器,然后查看容器。
docker ps # 列出正在运行的容器
docker ps -a # 列出所有容器,包括未运行的
明明启动了容器,为什么会自动退出了呢?这里通过查看日志来看看是什么原因。
docker logs 676164fb24b3 # 查看某个容器的日志
经过相关资料证实,这是因为内存不足导致的。所以在启动的时候,调整内存的分配,重新启动。
“ES_JAVA_OPTS=-Xms512m -Xmx512m”
通过上图可知,容器已经启动完成。现在就可以在浏览器输入 ip + 端口号 访问了。
配置跨域
通过项目中的配置,发现 cluster.name 这个与刚刚启动的不一致,ElasticSearch默认的cluster.name为elasticsearch,所以,这里需要进行修改。
首先进入容器。
docker exec -it es2 /bin/bash
我们需要对红框框圈中的文件"elasticsearch.yml"进行修改。
这里使用vim和vi命令,都提示"没有发现这个命令",这是因为Docker容器内部没有安装。所以,这里需要进行安装。
apt-get update # 获取最新的软件包
apt-get install vim # 下载
依次使用上面的命令即可安装成功,然后对"elasticsearch.yml"这个文件修改,增加如下内容。
cluster.name: "qfcwx-cluster"
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.name:自定义集群名称。
network.host:当前es节点绑定的ip地址,默认127.0.0.1,如果需要开放对外访问这个属性必须设置。
http.cors.enabled:是否支持跨域,默认为false。
http.cors.allow-origin:当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式。
重启ElasticSearch容器
使用exit命令从容器内部退出。
注意,这里是重启ElasticSearch容器,并不是重新启动一个新的容器。
docker restart es2
使用浏览器进行访问。
可以看到集群的名称已经变成我们自己设置的了。
查看ElasticSearch内部信息
如果没有指定版本号,就从Docker镜像仓库中拉取镜像的话,你是不知道版本号的。如果在Java中操作ElasticSearch,需要导入相应的约束或者jar包。这就需要和ElasticSearch版本号对应,不然就会报莫名的异常,所以,就需要查看当前ElasticSearch的本版号了,这里有两种方法。
①、通过 ip+端口号 可以看到返回的json数据中,version下面的number就是版本号。
②、通过查看ElasticSearch容器内部信息。
docker inspect 5acf0e8da90b # 查看容器内部信息