背景说明

目前我们 es 使用的基本上都是集群,1 主 1 从基本可以满足测试环境的需求,如果使用 docker run 的方式,那么需要该 2 个配置文件中的部分配置,然后再用 dockerrun 起来,这样也可以但是需要修改很多配置文件,相对比较繁琐一些,最近在研究 docker-compose,便想使用 docker-compose 来启动,所有需要用到的配置在一个地方进行设置,同时后期还可以使用其他的一些方法自动改此部分的配置,那么以后集群组件维护起来会方便很多。

使用 dockerrun 的启动方法:

docker run --name thunder-es_1 --net=host -d -v /data/project/esconfig/thunder-es-1.yml:/usr/share/elasticsearch/config/elasticsearch.yml 192.168.109.81:5000/es:5.5.1 elasticsearch
docker run --name thunder-es_2 --net=host -d -v /data/project/esconfig/thunder-es-1.yml:/usr/share/elasticsearch/config/elasticsearch.yml 192.168.109.81:5000/es:5.5.1 elasticsearch

# 配置文件中需要修改以下参数
cluster.name:es-cluster
node.name:node-1
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["192.168.109.101:9401","192.168.109.101:9402"]

# 如果允许header访问则增加以下配置
http.cors.enabled: true
http.cors.allow-origin: "*"

compose 的启动方法

docker-compose -f es-cluster.yml up -d

输入地址查看集群状态:
http://192.168.109.102:9208/_cat/health?v

#es-cluster.yml 文件说明 重要参数说明

version: '2.2'    
services:
  elasticsearch:     #服务名称
    image: es-cluster:5.5.1             #使用的镜像,该镜像是在官网的镜像基础上增加了允许head访问的配置项,其他内容与官网完全一样。
    container_name: elasticsearch    #容器名称,可与服务报名保持一致
    hostname: elasticsearch          #容器机器名,可与容器名称和服务报名保持一致
    environment:
      - cluster.name=docker-cluster       #集群名称,两个节点需要保持一致
      - bootstrap.memory_lock=true        #可根据需要配置
      - node.name=node-0                  #节点名称,与另外一个节点区分开
      - "xpack.security.enabled=false"    #xpack是否需要密码登录,打开后暂时不知道默认密码是多少
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - 9208:9200                 #重要:该集群对外出去的http端口号
      - 9308:9300                 #重要:该集群对外映射出去的transport端口号
    networks:           #可以使用自建网络
      - esnet
  elasticsearch2:
    image: es-cluster:5.5.1
    container_name: elasticsearch2
    hostname: elasticsearch2
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - node.name=node-1
      - "xpack.security.enabled=false"
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "discovery.zen.ping.unicast.hosts=elasticsearch"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    networks:
      - esnet

networks:
  esnet:

es-cluster 镜像文件的制作方法

Dockerfile


#新生成的镜像基于官网中的es进行创建
FROM docker.elastic.co/elasticsearch/elasticsearch:5.5.1
MAINTAINER by juanzi
#WORKDIR /data

RUN echo "http.cors.enabled: true">>/usr/share/elasticsearch/config/elasticsearch.yml
RUN echo "http.cors.allow-origin: \"*\" " >>/usr/share/elasticsearch/config/elasticsearch.yml

生成镜像命令:

docker build -t es-cluster:5.5.1 .

查看镜像:

docker images |grep "es-cluster"


↙↙↙阅读原文可查看相关链接,并与作者交流