• docker 创建elasticsearch集群镜像


    搞了2天终于搞好了

    更新: 
      2017/2/15: 更改elasticsearch.yml中绑定ip, 可开启集群效果
    2017/2/16: supervisord.conf 加入 autostart=true, 开启景象自动启动
      2017/2/16: 更改elasticsearch.yml中ip嗅探, 真正实现热插拔集群
    bug: 指定的物理机挂在目录仍然存在问题

     需要: 一个能在linux下正常运行的 elasticsearch-2.4.0 版本, 直接copy进镜像, 安装好head, bigdesk, ik分词  器等, 在elasticsearch中有讲: http://www.cnblogs.com/wenbronk/p/6390462.html

     Dockerfile

    ############################################
    # version : wenbronk/jdk8u121/elasticsearch2.4
    # desc : 当前版本安装的escluster 2.4.0
    ############################################
    
    FROM wenbronk/jdk8u121
    MAINTAINER wenbronk "wenbronk@163.com"
    
    # 设置环境变量,所有操作都是非交互式的
    ENV DEBIAN_FRONTEND noninteractive
    
    # 添加 supervisord 的配置文件,并复制配置文件到对应目录下面。(supervisord.conf文件和Dockerfile文件在同一路径)
    COPY supervisord.conf /etc/supervisor/supervisord.conf
    
    RUN echo "export LC_ALL=C"
    
    # 设置 ES 的环境变量,若有其他的环境变量需要设置,也可以在这里添加。
    ENV ES_HOME /var/tmp/elasticsearch-2.4.0
    ENV PATH $PATH:$PATH:$ES_HOME/bin
    
    # 创建elasticsearch的数据目录, 同时将权限给admin用户
    RUN mkdir /escluster
    
    # 复制elasticsearch-2.4.0(本地能正常运行的es, 安装好ik插件) 到镜像中 /var/tmp
    COPY elasticsearch-2.4.0 /var/tmp/elasticsearch-2.4.0   
    
    # 修改文件夹权限
    # RUN chown -R admin:admin /var/tmp/elasticsearch-2.4.0
    # RUN chown -R admin:admin /escluster
    
    # 挂载/software/elasticsearch-2.4.0/config和/escluster目录
    VOLUME ["/var/tmp/elasticsearch-2.4.0/config"]
    VOLUME ["/escluster"]
    
    # 容器需要开放ES的9200和9300端口
    EXPOSE 9200
    EXPOSE 9300
    
    # 执行supervisord来同时执行多个命令,使用 supervisord 的可执行路径启动服务。
    CMD ["/usr/bin/supervisord"]

     supervisord.conf

    [supervisord]
    nodaemon=true
    
    [program:sshd]
    command=/usr/sbin/sshd -D
    
    [program:elasticsearch]
    command=/bin/bash -c "exec ${ES_HOME}/bin/elasticsearch -DFOREGROUND"
    autostart=true

    elasticsearch.yml 文件位于 ${ES_HOME}/config下

    # ======================== Elasticsearch Configuration =========================
    #
    # NOTE: Elasticsearch comes with reasonable defaults for most settings.
    #       Before you set out to tweak and tune the configuration, make sure you
    #       understand what are you trying to accomplish and the consequences.
    #
    # The primary way of configuring a node is via this file. This template lists
    # the most important settings you may want to configure for a production cluster.
    #
    # Please see the documentation for further information on configuration options:
    # <http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html>
    #
    # ---------------------------------- Cluster -----------------------------------
    #
    # Use a descriptive name for your cluster:
    #
    cluster.name: wenbronk-escluster
    #
    # ------------------------------------ Node ------------------------------------
    #
    # Use a descriptive name for the node:
    #
    # node.name: wenbronk-esnode01
    #
    # Add custom attributes to the node:
    #
    # node.rack: r1
    #
    # ----------------------------------- Paths ------------------------------------
    #
    # Path to directory where to store the data (separate multiple locations by comma):
    #
    # path.data: /escluster/data
    path.data: /escluster/data
    # #
    # # Path to log files:
    # #
    path.logs: /escluster/logs
    #
    # Path to log files:
    #
    # path.logs: /escluster/logs
    #
    # ----------------------------------- Memory -----------------------------------
    #
    # Lock the memory on startup:
    #
    # bootstrap.memory_lock: true
    #
    # Make sure that the `ES_HEAP_SIZE` environment variable is set to about half the memory
    # available on the system and that the owner of the process is allowed to use this limit.
    #
    # Elasticsearch performs poorly when the system is swapping the memory.
    #
    # ---------------------------------- Network -----------------------------------
    #
    # Set the bind address to a specific IP (IPv4 or IPv6):
    #
    network.host: 0.0.0.0
    #
    # Set a custom port for HTTP:
    #
    http.port: 9200
    #
    # For more information, see the documentation at:
    # <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html>
    #
    # --------------------------------- Discovery ----------------------------------
    #
    # Pass an initial list of hosts to perform discovery when new node is started:
    # The default list of hosts is ["127.0.0.1", "[::1]"]
    #
    discovery.zen.ping.unicast.hosts: ["192.168.1.110", "[::1]"]
    #
    # Prevent the "split brain" by configuring the majority of nodes (total number of nodes / 2 + 1):
    #
    # discovery.zen.minimum_master_nodes: 3
    #
    # For more information, see the documentation at:
    # <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery.html>
    #
    # ---------------------------------- Gateway -----------------------------------
    #
    # Block initial recovery after a full cluster restart until N nodes are started:
    #
    # gateway.recover_after_nodes: 3
    #
    # For more information, see the documentation at:
    # <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-gateway.html>
    #
    # ---------------------------------- Various -----------------------------------
    #
    # Disable starting multiple nodes on a single system:
    #
    # node.max_local_storage_nodes: 1
    #
    # Require explicit names when deleting indices:
    #
    # action.destructive_requires_name: true
    
    index.analysis.analyzer.ik.type: ik

        

    创建镜像:

    docker build -t wenbronk/jdk8u121/escluster .

    注: 因为es使用非root账户, docker默认使用root账户, 开启一直不成功, supervisord还没来及学, 所以暂时使用root开启es

    vim ./bin/elasticsearch

    插入

    -Des.insecure.allow.root="true"

    启动

    docker run -d -p 9990:22 -p 9200:9200 -p 9300:9300 -v /docker/escluster01:/esculster wenbronk/jdk8u121/escluster
    docker run -d -p 9991:22 -p 9201:9200 -p 9301:9300 -v /docker/escluster01:/esculster wenbronk/jdk8u121/escluster
    docker run -d -p 9992:22 -p 9202:9200 -p 9302:9300 -v /docker/escluster01:/esculster wenbronk/jdk8u121/escluster

    可通过ip查看

    http://www.wenbronk.com:9200/_plugin/head/

     或者链接进容器查看

    >dockers exec -it CONTAINER_ID /bin/bash
    >container>/var/tmp/es/bin/elasticsearch -d 
  • 相关阅读:
    OC,iOS浮点型数据的计算不正确问题
    Swift中AVFoundation的简单使用
    一款经典的stick footer布局
    swift获取当前活动的viewcontroller
    xib的NSLayoutConstraint是否有效
    bootstrap的quartz定时任务简单使用
    Python实现:某个用户登录后,查看自己拥有所有权限
    ftp作业
    实现计算器
    面向对象作业——校园管理系统
  • 原文地址:https://www.cnblogs.com/wenbronk/p/6390898.html
Copyright © 2020-2023  润新知