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 

 

posted @ 2017-02-12 14:18  bronk  阅读(1027)  评论(0编辑  收藏  举报