全⽂检索⽰例:构建⾃⼰Elasticsearchdocker镜像(1)
简介
本⽂主要介绍如何构建⾃⼰的Elasticsearch docker镜像
构建原因
官⽅的Elasticsearch docker镜像没有中⽂分词插件,本章节介绍如何构建⼀个带有ik分词插件的Elasticsearch docker镜像
环境介绍
系统:centos7.6 ,IP:192.168.1.14
软件版本
docker 1.3.1
docker-compose 1.18.0
elasticsearch基础镜像 6.8.3
ik插件 6.8.3
前置条件
已有Centos7的Docker环境
本⽂基于Centos7的Docker进⾏演⽰,如果没有Centos7的Docker环境,可以参照
已有Nginx或Apache环境
IK⾃定义词典需要放到web服务器中,⽤于实现词典热加载。
另外构建镜像时,将IK插件放在web服务器上,⽤于提⾼安装速度
本次构建基于当前linux虚拟机中的nginx,安装步骤参见
软件准备
# 安装wget包
yum install -y wget
# 下载分词插件(此处使⽤wget下载,也可以⽤浏览器下载后上传到虚拟机中)
wget github/medcl/elasticsearch-analysis-ik/releases/download/v6.8.3/elasticsearch-analysis-ik-6.8.3.zip
#在nginx的root⽬录(/usr/share/nginx/html)下创建soft⽂件夹
[root@localhost ~]# mkdir -vp /usr/share/nginx/html/soft
mkdir: 已创建⽬录"/usr/share/nginx/html/soft"
# 将插件包移动到soft⽬录下
[root@localhost ~]# mv elasticsearch-analysis-ik-6.8.3.zip /usr/share/nginx/html/soft
# 如果你跟我⼀样在192.168.1.14这个机器上⽤docker装的nginx,需要关闭防⽕墙
systemctl stop firewalld
systemctl disable firewalld
# 此时便可以通过192.168.1.14/soft/elasticsearch-analysis-ik-6.8.3.zip地址下载ik插件包
IK配置
准备⾃定义词典
# 在nginx的root⽬录(/usr/share/nginx/html)下创建ik⽂件夹
[root@localhost ~]# mkdir -vp /usr/share/nginx/html/ik
mkdir: 已创建⽬录"/usr/share/nginx/html/ik"
# 创建⾃定义词典⽂件和⾃定义停⽤词⽂件
[root@localhost ~]# touch /usr/share/nginx/html/ik/my_extra.dic
[root@localhost ~]# touch /usr/share/nginx/html/ik/my_stopword.dic
# 验证词典⽂件可以访问,如果下⾯两条命令没有任何返回表明nginx启动成功且分词⽂件(⽬前⽆内容)可以访问
[root@localhost ~]# curl 192.168.1.14/ik/my_extra.dic
[root@localhost ~]# curl 192.168.1.14/ik/my_stopword.dic
准备配置⽂件
# 创建构建⽬录
[root@localhost ~]# mkdir -vp /root/docker-build/elasticsearch/
mkdir: 已创建⽬录"/root/docker-build/elasticsearch/"
# 在构建⽬录下创建ik配置⽂件
[root@localhost ~]# vim /root/docker-build/elasticsearch/l
ik配置⽂件内容如下,ikserver表⽰⼀个域名,当我们启动elasticsearch镜像时将ikserver映射到192.168.1.14,这样做的好处是当我们词典换服务器的时候不⽤重新构建镜像,修改启动elasticsearch配置⽂件就可以了
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "java.sun/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--⽤户可以在这⾥配置⾃⼰的扩展字典
<entry key="ext_dict"></entry> -->
<!--⽤户可以在这⾥配置⾃⼰的扩展停⽌词字典
<entry key="ext_stopwords"></entry>-->
<!--⽤户可以在这⾥配置远程扩展字典 -->
<entry key="remote_ext_dict">ikserver/ik/my_extra.dic</entry>
<!--⽤户可以在这⾥配置远程扩展停⽌词字典-->
<entry key="remote_ext_stopwords">ikserver/ik/my_stopword.dic</entry>
</properties>
构建镜像
构建镜像需要创建以下⽂件
Dockerfile 指明构建步骤
build.sh 执⾏构建命令
Dockerfile
# 在构建⽬录下创建Dockerfile⽂件
[root@localhost ~]# vim /root/docker-build/elasticsearch/Dockerfile
⽂件内容如下
# 基于es官⽅提供的镜像构建
FROM /elasticsearch/elasticsearch:6.8.3
# ik插件安装
RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch 192.168.1.14/soft/elasticsearch-analysis-ik-6.8.3.zip
# 添加ik配置⽂件
ADD ./l /usr/share/elasticsearch/config/analysis-ik/l
build.sh
# 在构建⽬录下创建build.sh⽂件
[root@localhost ~]# vim /root/docker-build/elasticsearch/build.sh
build.sh⽂件内容
docker build -t huanqingdong/elasticsearch:6.8.3-ik .
-t 后⾯为tag名称,格式 docker账号/镜像名称:版本
此处docker账号:huanqingdong ,镜像名称:elasticsearch ,版本:6.8.3-ik
最后⾯⼀个 . 表⽰基于当前⽬录内容构建
执⾏构建
# 进⼊构建⽬录
[root@localhost ~]# cd /root/docker-build/elasticsearch
# 执⾏构建脚本build.sh
[root@localhost elasticsearch]# sh build.sh
Sending build context to Docker daemon 4.608 kB
Step 1/3 : FROM /elasticsearch/elasticsearch:6.8.3
Trying to pull repository /elasticsearch/elasticsearch ...
6.8.3: Pulling from /elasticsearch/elasticsearch
b38629870fdb: Pull complete
3c0cf3930e47: Pull complete
27387c4a7b1c: Pull complete
eb71028b39e7: Pull complete
5f79cf544a7c: Pull complete
ab0fbae6b662: Pull complete
f8e59ec3ec96: Pull complete
Digest: sha256:9855face4588eda23a69dfada992d0894d64ed06f4549cc5a0b8242415013ba5
Status: Downloaded newer image for /elasticsearch/elasticsearch:6.8.3
---> 1d0fd79266e6
Step 2/3 : RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch 192.168.1.14/soft/elasticsearch-analysis-ik-6.8.3.zip ---> Running in 848f3d2b25da
-> Downloading 192.168.1.14/soft/elasticsearch-analysis-ik-6.8.3.zip
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.SocketPermission * connect,resolve
See acle/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
-> Installed analysis-ik
---> 38fd3895db41
Removing intermediate container 848f3d2b25da
Step 3/3 : ADD ./l /usr/share/elasticsearch/config/analysis-ik/l
---> 40ecc3e5967e
Removing intermediate container 7d557c7be523
Successfully built 40ecc3e5967e
# 查看构建完成的镜像
[root@localhost elasticsearch]# docker images |grep elasticsearch
huanqingdong/elasticsearch 6.8.3-ik aaeedbcf3b0f 6 minutes ago 814 MB
/elasticsearch/elasticsearch 6.8.3 1d0fd79266e6 6 weeks ago 800 MB
可能出现的异常
-> Downloading 192.168.1.14/soft/elasticsearch-analysis-ik-6.8.3.zip
Exception in thread "main" java.NoRouteToHostException: No route to host (Host unreachable)
at java.base/java.PlainSocketImpl.socketConnect(Native Method)
at java.base/java.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/tToAddress(AbstractPlainSocketImpl.java:242)
at java.base/t(AbstractPlainSocketImpl.java:224)
at java.base/t(Socket.java:591)
at java.base/t(Socket.java:540)nginx停止命令
at java.base/sun.NetworkClient.doConnect(NetworkClient.java:182)
at java.base/sun.www.http.HttpClient.openServer(HttpClient.java:474)
at java.base/sun.www.http.HttpClient.openServer(HttpClient.java:569)
at java.base/sun.www.http.HttpClient.<init>(HttpClient.java:242)
at java.base/sun.www.http.HttpClient.New(HttpClient.java:341)
at java.base/sun.www.http.HttpClient.New(HttpClient.java:362)
at java.base/sun.www.protocol.NewHttpClient(HttpURLConnection.java:1248) at java.base/sun.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1187)
at java.base/sun.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1081)
at java.base/sun.www.protocol.t(HttpURLConnection.java:1015)
at java.base/sun.www.protocol.InputStream0(HttpURLConnection.java:1587) at java.base/sun.www.protocol.InputStream(HttpURLConnection.java:1515) at org.elasticsearch.plugins.InstallPluginCommand.downloadZip(InstallPluginCommand.java:379)
at org.elasticsearch.plugins.InstallPluginCommand.download(InstallPluginCommand.java:278)
at org.elasticsearch.ute(InstallPluginCommand.java:229)
at org.elasticsearch.ute(InstallPluginCommand.java:216)
at org.elasticsearch.ute(EnvironmentAwareCommand.java:86)
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
at org.elasticsearch.ute(MultiCommand.java:77)
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
at org.elasticsearch.cli.Command.main(Command.java:90)
at org.elasticsearch.plugins.PluginCli.main(PluginCli.java:47)
处理⽅式,关闭nginx所在服务器的防护墙
systemctl stop firewalld
systemctl disable firewalld
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论