美文网首页docker
Docker 制作 Elasticsearch 镜像

Docker 制作 Elasticsearch 镜像

作者: 神奇作手 | 来源:发表于2019-10-29 00:04 被阅读0次

    1、拉取镜像及相关配置

    1.1、拉取镜像
    docker pull elasticsearch:6.8.3
    
    1.2、启动容器
    docker run --name=test_es -d -p 9200:9200 -p 9300:9300 docker.io/elasticsearch:6.8.3
    
    1.3、查看容器启动情况
    docker ps
    
    1.4、如果启动成功则访问

    你的ip:9200,可以访问则可以直接启动成功,不成功则进行如下操作

    2、服务器中配置(主机配置)

    2.1、查看启动报错日志(情况1)

    2.1.1如果报如下错误
    [2019-10-27T14:38:59,356][INFO ][o.e.n.Node               ] [kniXCrn] starting ...
    [2019-10-27T14:38:59,712][INFO ][o.e.t.TransportService   ] [kniXCrn] publish_address {172.17.0.6:9300}, bound_addresses {[::]:9300}
    [2019-10-27T14:38:59,754][INFO ][o.e.b.BootstrapChecks    ] [kniXCrn] bound or publishing to a non-loopback address, enforcing bootstrap checks
    ERROR: [1] bootstrap checks failed
    [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    [2019-10-27T14:38:59,827][INFO ][o.e.n.Node               ] [kniXCrn] stopping ...
    [2019-10-27T14:38:59,855][INFO ][o.e.n.Node 
    

    出现此错误:ERROR: [1] bootstrap checks failed
    则修改 /etc/sysctl.conf 配置,修改如下:

    2.1.2、打开配置文件 sysctl.conf
    vim /etc/sysctl.conf 
    

    在配置文件最下面,添加如下配置:

    vm.max_map_count=655360
    

    修改完成后,执行此命令

    sysctl -p
    

    然后,重新启动elasticsearch,即可启动成功;

    2.2、查看启动报错日志(情况2)

    2.2.1、如果报如下错误
    Java HotSpot(TM) 64-Bit Server VM warning: INFO:
    os::commit_memory(0x0000000085330000, 2060255232, 0) failed;
    error=’Cannot allocate memory’ (errno=12)
    

    这是由于elasticsearch:tag 默认分配 jvm 空间太大,内存不足以分配导致。
    解决方法就是修改jvm空间分配。

    2.2.2、查找 jvm.options 文件
    find /var/lib/ -name jvm.options
    
    2.2.3、修改查找到的 jvm.options 文件
    vim /var/lib/docker/overlay2/1ff5019ead459b4d090b4a72e95e3cc17dc7a8432ce0051e470a3c99ac35c4a6/diff/usr/share/elasticsearch/config/jvm.options
    
    # Xms represents the initial size of total heap space
    # Xmx represents the maximum size of total heap space
    
    -Xms512m
    -Xmx512m
    
    ################################################################
    ## Expert settings
    ################################################################
    

    均改为 512m

    保存退出,再次运行创建运行elasticsearch命令,成功启动。

    2.2.3、在浏览其中访问

    如果访问不了,在服务器中访问,测试一下是否启动起来了

    curl localhost:9200
    

    3、文件挂载及

    3.1、文件挂载前准备

    进入刚才启动的 test_es 容器中,找到配置文件所在位置,进入容器命令如下:

    docker exec -it test_es bash
    

    找到配置文件所在位置:/usr/share/elasticsearch/config 下,可以看的配置文件:elasticsearch.yml

    拷贝配置文件到宿主机 /opt/elasticsearch/ 目录下

    docker cp  test_es:/usr/share/elasticsearch/config/elasticsearch.yml  /opt/elasticsearch/
    

    停止并且删除原来创建的容器

    docker stop test_es 
    docker rm  test_es
    
    3.2、修改 /opt/elasticsearch/elasticsearch.yml 配置文件

      将 transport.host: 0.0.0.0 前的#去掉后保 存文件退出。其作用是允许任何ip地址访问elasticsearch 开发测试阶段可以这么做,生 产环境下指定具体的IP
    在 elasticsearch.yml 配置文件中添加如下跨域访问,方便下面的可视化连接工具连接

    cluster.name: "docker-cluster"
    network.host: 0.0.0.0
    
    #开启跨域访问
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    
    3.3、重新创建容器
    docker run -d --name=tensquare_elasticsearch -p 9200:9200 -p 9300:9300 -v  /opt/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:6.8.3
    
    
    3.4、系统调优

    启动后发现启动失败了,这时什么原因呢?这与我们刚才修改的配置有关,因为 elasticsearch在启动的时候会进行一些检查,比如最多打开的文件的个数以及虚拟内存 区域数量等等,如果你放开了此配置,意味着需要打开更多的文件以及虚拟内存,所以 我们还需要系统调优。

    一共需要修改两处

    (1)修改 /etc/security/limits.conf

    添加如下内容

    * soft nofile 65536 
    * hard nofile 65536
    

    nofile是单个进程允许打开的最大文件个数
    soft nofile 是软限制
    hard nofile是硬限制

    (2)修改 /etc/sysctl.conf

    添加如下内容

    vm.max_map_count=655360
    

    限制一个进程可以拥有的VMA(虚拟内存区域)的数量;
    执行下面命令 修改内核参数马上生效

    sysctl -p
    

    重新启动虚拟机,再次启动容器,发现已经可以启动并远程访问

    在浏览其中输入http: //47.99.218.xxx:9200

    4、ik 分词器安装

    4.1、准备工作

    (1)、先准备一个与 elasticsearch:6.8.3 相对对应的 ik 分词器 elasticsearch-analysis-ik-6.8.3.zip;
    可在 GitHub上下载:https://github.com/medcl/elasticsearch-analysis-ik/releases

    (2)、新建一个 ik683 文件夹,将 ik 分词器 elasticsearch-analysis-ik-6.8.3.zip 解压在里面;

    (3)、添加一些配置一会测试用,在 ..\ik683\config\ 目录下添加一个 custom.dic 自己定制的词汇分词规则,如下

    
    传智播客
    传智
    播客
    

    注意:此文件必须保存为 utf-8 格式;内容中顶部预留一个空行,防止第一行忽略现象

    (4)、在本目录下的 IKAnalyzer.cfg.xml 配置文件中进行配置

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict">custom.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords"></entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <!-- <entry key="remote_ext_dict">words_location</entry> -->
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
    </properties>
    
    4.2、将 ik683 文件上传

    本人将 elasticsearch 相关的配置都放在liunx主机的 /opt/elasticsearch/ 下

    [root@iZxz5n6q7bcnqgZ elasticsearch]# ll
    total 8
    -rwxrwxrwx 1 root root  127 Oct 28 10:03 elasticsearch.yml
    drwxr-xr-x 3 root root 4096 Oct 28 22:31 ik683
    [root@iZxz5n6q7bcnqgZ elasticsearch]# 
    
    4.3、拷贝 ik683 到容器中
    docker cp ik683  tensquare_elasticsearch:/usr/share/elasticsearch/plugins/
    
    4.4、从新启动容器
     docker restart 6bc33fa55cce
    
    4.5、测试 ik分词器

    注意:es:6.x.x之后调用 ik分词器要使用 Get或 Post带 json形式的请求体

    (1)、es 自带分词器

    调用地址:http://47.99.xxx.xxx:9200/_analyze
    内置划分,json参数:

    {
        "analyzer": "chinese",
        "text": "传智播客"
    }
    
    (2)、使用 ik分词器

    IK提供了两个分词算法: ik_smart (最少切分) 和 ik_max_word (最细粒度划分)
    调用地址:http://47.99.xxx.xxx:9200/_analyze

    ①、最少切分,json参数:

    {
        "analyzer": "ik_smart",
        "text": "传智播客"
    }
    

    ②、最细粒度划分,json参数:

    {
        "analyzer": "ik_max_word",
        "text": "传智播客"
    }
    

    5、elasticsearch-head 可视化工具使用

    5.1、使用docker 拉取 elasticsearch-head

    docker pull mobz/elasticsearch-head:5
    

    5.2、创建相关容器

    docker run --name=tensquare_es-head -d -p 9100:9100 docker.io/mobz/elasticsearch-head:5
    

    5.3、页面访问

    访问地址:http//自己ip:9100

    在 1处 输入要显示的 elasticsearch 的访问路径

    6、logstash 同步 mysql 数据库数据

    待续......

    相关文章

      网友评论

        本文标题:Docker 制作 Elasticsearch 镜像

        本文链接:https://www.haomeiwen.com/subject/lvomvctx.html