一、单节点运行
首先,到hub.docker.com搜索指定版本的elasticsearch,以5.3.0为例:https://hub.docker.com/_/elasticsearch?tab=tags&page=1&ordering=last_updated&name=5.3.0,确认docker镜像存在之后,使用docker pull elasticsearch:5.3.0
命令拉取镜像。
然后,查看Description,里面有详细的运行方法,对于想要玩一玩的开发者,可以使用单节点运行方式
$ docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
运行es容器。
二、集群部署
如果想要运行在生产模式,则需要参考下es官方文档的描述,以当前最新版7.5的运行来说,文档链接:https://www.elastic.co/guide/en/elasticsearch/reference/7.5/docker.html,如果想要运行其它版本的docker容器,可以通过右侧版本下拉列表选取指定的版本
比如这里选取5.3版本,文档链接:https://www.elastic.co/guide/en/elasticsearch/reference/5.3/docker.html
在正式使用docker部署es集群之前,一定要仔细看看文档。
1. xpack
安装文档第一行就是这段文字,文字的大体意思就是xpack已经预先安装在了容器之中,授权30天的使用时间,可以等过期之后花钱续期,也可以现在就关闭xpack。
关于xpack,其使用文档链接如下:https://www.elastic.co/guide/en/x-pack/5.3/security-getting-started.html
当然,为了防止以后的使用麻烦,这里最佳的选择就是直接关闭xpack,但是官方比较鸡贼的是没有提供如何在docker中关闭xpack的方法。
2.docker-compose
官方提供了5.3.3版本下的docker-compose部署脚本,部署脚本如下
version: '2'
services:
elasticsearch1:
image: docker.elastic.co/elasticsearch/elasticsearch:5.3.3
container_name: elasticsearch1
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
mem_limit: 1g
cap_add:
- IPC_LOCK
volumes:
- esdata1:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- esnet
elasticsearch2:
image: docker.elastic.co/elasticsearch/elasticsearch:5.3.3
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.zen.ping.unicast.hosts=elasticsearch1"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
mem_limit: 1g
cap_add:
- IPC_LOCK
volumes:
- esdata2:/usr/share/elasticsearch/data
networks:
- esnet
volumes:
esdata1:
driver: local
esdata2:
driver: local
networks:
esnet:
driver: bridge
这份脚本我认为是有问题的,首先,它只开放了9200端口号,在java sdk中,需要使用9300端口号;其次,elasticsearch2未开放任何端口号,这意味着对外端口号随机开放,使用起来非常不方便;最后,这里并没有演示如何关闭xpack。
三、自定义镜像和docker-compose
1.安装ik分词插件和拼音插件
国人使用es肯定要使用ik分词插件或者pinyin插件,两个插件的下载地址如下:
ik分词插件:https://github.com/medcl/elasticsearch-analysis-ik/tags
pinyin插件:https://github.com/medcl/elasticsearch-analysis-pinyin/tags
安装这两个插件一定要注意:插件版本号要和es版本号完全一致,否则es启动会报错,提示使用正确的插件版本
为了方便使用,这里自定义docker镜像,并且之后在docker-compose中使用。下载好ik和pinyin插件之后将其解压到Dockerfile同级目录,然后写一个Dockerfile文件,Dockerfile文件如下
FROM docker.elastic.co/elasticsearch/elasticsearch:5.3.0
COPY ik /usr/share/elasticsearch/plugins/ik
COPY pinyin /usr/share/elasticsearch/plugins/pinyin
EXPOSE 9200 9300
运行以下命令生成myes:v1版本镜像
docker build . -t myes:v1
2.自定义docker-compose
目标是使用docker-compose启动双节点集群之后所有节点都要安装好ik分词和pinyin分词,还要关闭xpack,关于关闭xpack的方法,很多人想到是容器启动完成会后到容器中动态删除xpack,然后重启容器。。这种方式是行不通的,其实关闭xpack的方式很简单,只需要在docker-compose中加入两个环境变量就好了
environment:
- xpack.security.enabled=false
- xpack.monitoring.enabled=false
完整的docker-compose文件如下:
version: '2'
services:
elasticsearch1:
image: myes:v1
container_name: elasticsearch1
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- xpack.security.enabled=false
- xpack.monitoring.enabled=false
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
mem_limit: 1g
cap_add:
- IPC_LOCK
#volumes:
#- esdata1:/usr/share/elasticsearch/data
ports:
- 9200:9200
- 9300:9300
networks:
- esnet
elasticsearch2:
image: myes:v1
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.zen.ping.unicast.hosts=elasticsearch1"
- xpack.security.enabled=false
- xpack.monitoring.enabled=false
ports:
- 9201:9200
- 9301:9300
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
mem_limit: 1g
cap_add:
- IPC_LOCK
#volumes:
#- esdata2:/usr/share/elasticsearch/data
networks:
- esnet
volumes:
esdata1:
driver: local
esdata2:
driver: local
networks:
esnet:
driver: bridge
之后使用
docker-compose up -d
命令启动即可。
当然,可以先不加-d参数启动看看日志是否报错。
注意:本文归作者所有,未经作者允许,不得转载