Docker常用镜像:Elasticsearch7.17.7
2020/12/03
Docker
Elasticsearch
> 官方教程:[Install Elasticsearch with Docker](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/docker.html) # 镜像拉取 ```bash # docker官网拉取 docker pull elastic/elasticsearch:7.17.7 ``` > 因为`Spring Boot 2.7.6`对应的`Spring Data Elasticsearch 4.4.6`对应的`Elasticsearch`的版本为`7.17.7`,所以本文以此版本为例 # 单节点快速使用 ```bash # 启动 docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elastic/elasticsearch:7.17.7 ``` 浏览器访问:`http://[ip]:9200` PS:此处启动后容器留着,后面会用到 # 生产环境使用检查 > 生产环境使用时,需要注意如下设置: ## 修改 sysctl.conf ```bash # 编辑配置文件 vim /etc/sysctl.conf # 添加如下设置(虚拟内存) vm.max_map_count = 262144 # 保存后执行以下命令立即生效 sysctl -p ``` ## 配置文件必须是elasticsearch用户可读的 > 默认情况下,容器运行使用`elasticsearch`用户并且`uid:gid`为`1000:0`,所以使用`-v`绑定本地数据卷时,需要修改文件夹访问权限以允许容器访问 这一步先不做,后面实战使用会有 ```bash mkdir esdatadir chmod g+rwx esdatadir chgrp 0 esdatadir ``` ## 检查Docker容器默认ulimits的nofile和nproc 运行一个测试容器(运行时会拉取centos镜像,请耐心等待),输出默认值 ```bash docker run --rm centos:7 /bin/bash -c 'ulimit -Hn && ulimit -Sn && ulimit -Hu && ulimit -Su' ``` 默认情况下,会输出如下内容 - 前两位代表:最多可开启的文件数,最小要求65536 - 后两位代表:进程开启多少个线程,最小要求4096 - unlimited代表不受限制 ``` 1048576 1048576 unlimited unlimited ``` 若出现被限制的值,则需要在执行`docker run`时添加如下参数 ```bash --ulimit nofile=65536:65536 --ulimit nproc=4096:4096 ``` ## 禁用 swap 分区 ### 方案1:关闭宿主机的 swap > 若已关闭则忽略 临时关闭 ```bash swapoff -a ``` 永久关闭 ```bash #编辑配置文件 vim /etc/fstab # 在/etc/fstab中swap分区这行前加 # # /dev/mapper/centos-swap swap swap defaults 0 0 ``` ### 方案2:关闭容器的 swap 在执行`docker run`时添加如下参数 ```bash -e "bootstrap.memory_lock=true" --ulimit memlock=-1:-1 ``` ## 映射端口 端口 | 协议 | 作用 ---|---|--- 9200 | tcp | 客户端访问 9300 | tcp | 集群数据通信 如`单节点快速使用`示例,在执行`docker run`时添加`-p`参数 > 如果是单节点,9300可以不用暴露 如果不需要外部访问,仅容器之间访问,9200也可以不用暴露 ## 检查Docker存储驱动程序 不建议使用`loop-lvm`驱动 ```bash # 执行 docker info | grep Storage # 查看结果是否如下,默认情况下,驱动为overlay2 Storage Driver: overlay2 ``` 如若出现`loop-lvm`,请参考[Docker storage drivers](https://docs.docker.com/storage/storagedriver/select-storage-driver/)相关文档 # 生产环境使用(单节点) ## 文件夹准备 ```bash # 创建elasticsearch相关文件夹 mkdir -p /work/elasticsearch # 进入 cd /work/elasticsearch # 创建数据存储文件夹,并修改文件夹所有者 mkdir data chmod g+rwx data chgrp 0 data # 创建存放配置文件的文件夹 mkdir config # 创建自定义image文件夹,并创建ik分词器文件夹 mkdir -p image/ik ``` ## 添加 elasticsearch-analysis-ik > ik中文分词器,推荐必装 ### 下载 下载地址:[https://github.com/medcl/elasticsearch-analysis-ik/releases](https://github.com/medcl/elasticsearch-analysis-ik/releases) 需要下载对应的`7.17.7`版本`zip`包。注意!是`zip`包! ### 解压 ```bash # 安装解压工具(若已安装,则忽略此步) yum -y install zip unzip # 解压 unzip elasticsearch-analysis-ik-7.17.7.zip -d /work/elasticsearch/image/ik/ # 删除 rm -rf elasticsearch-analysis-ik-7.17.7.zip ``` ## 自定义配置文件 ### 获取默认配置文件 > `单节点快速使用`时创建了一个默认容器,可以直接从这个容器内取出默认配置文件 ```bash # 复制默认elasticsearch配置文件 docker cp elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml ./config/ # 复制默认jvm配置 docker cp elasticsearch:/usr/share/elasticsearch/config/jvm.options ./config/ ``` ### 修改配置文件 > `elasticsearch.yml`没啥要修改的,防止后面要修改,所以拷贝出来,`jvm.options`主要是修改`jvm`内存 编辑配置文件 ```bash vim ./config/jvm.options ``` 默认使用jvm内存为1G,最小可以设置为256m,最大看情况,设置时,两个值必须相等!!! ```bash -Xms512m -Xmx512m ``` > 设置为`256m`的配置我已经在服务器上跑了很久了,没有问题,实际内存占用不超过`500m`。 PS:我的数据量不大,并发几乎没有 ## 制作镜像 ### 编写 Dockerfile 新建一个Dockerfile文件 ```bash vim ./image/Dockerfile ``` 添加如下内容 ```bash FROM elastic/elasticsearch:7.17.7 ENV TZ=Asia/Shanghai USER elasticsearch ADD ik /usr/share/elasticsearch/plugins/ik/ ``` ### 编写制作镜像脚本 编写启动脚本 ```bash vim build.sh ``` 内容如下 ``` #!/bin/bash cd ./image/ docker build -t elasticsearch-ik:7.17.7 . ``` 授予执行权限 ``` chmod 744 build.sh ``` ### 编写容器启动脚本 编写启动脚本 ```bash vim start.sh ``` 内容如下 ``` #!/bin/bash docker rm -f elasticsearch rm -rf data/* docker run -d --name elasticsearch --restart always \ -v /work/elasticsearch/data/:/usr/share/elasticsearch/data \ -v /work/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /work/elasticsearch/config/jvm.options:/usr/share/elasticsearch/config/jvm.options \ -p 9200:9200 \ -e "discovery.type=single-node" \ elasticsearch-ik:7.17.7 ``` 授予执行权限 ``` chmod 744 start.sh ``` 启动脚本注意如下事项 - 如果不需要重启时删除数据,则删除或注释掉`rm -rf data/*` - `ulimit`相关设置根据情况自行添加 - `swap`相关设置根据情况自行添加 - 端口根据需要进行暴露 ## 启动 ```bash # 制作镜像 ./build.sh # 启动容器 ./start.sh ```
121