docker容器技术应用-docker-compose运行Elasticsearch

最近在学习Elasticsearch,首先是通过docker运行es单节点,然后通过curl发送http请求来实现增删改查等操作。

近期看了阮一鸣老师讲的《Elasticsearch核心技术与实战》中,通过docker-compose来运行Elasticsearch集群+kibana+cerebro,此处记录一下,有在学习es的同学可留言互相交流,谢谢。

es:分布式的搜索与分析引擎,提供了近实时的搜索和聚合功能

kibana:提供了丰富的可视化展现与分析功能,此处主要用到Dev Tools开发工具来代替curl操作es

cerebro:可视化的监控es集群相关信息

实现步骤:

1、首先创建docker-compose.yml文件

version: '3.0'  #一共三个版本,1.x、2.x、3.x,目前主流是3.x
services:
  # sign node
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
    container_name: es761
    environment:
      - cluster.name=yxes
      - node.name=es761
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.seed_hosts=es761
      - network.publish_host=elasticsearch  #对外的名称
      - cluster.initial_master_nodes=es761
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes: 
      - /Users/admin/home/docker/mapping/esstack/es/es761/data:/usr/share/elasticsearch/data
      - /Users/admin/home/docker/mapping/esstack/es/es761/plugins:/usr/share/elasticsearch/plugins
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - es761net
  # multi node
  # elasticsearch:
  #   image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
  #   container_name: es761_01
  #   environment:
  #     - cluster.name=yxes
  #     - node.name=es761_01
  #     - bootstrap.memory_lock=true
  #     - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  #     - discovery.seed_hosts=es761_01,es761_02
  #     - network.publish_host=elasticsearch
  #     - cluster.initial_master_nodes=es761_01,es761_02
  #   ulimits:
  #     memlock:
  #       soft: -1
  #       hard: -1
  #   volumes:
  #     - /Users/admin/home/docker/mapping/esstack/es/es761_01:/usr/share/elasticsearch/data
  #   ports:
  #     - 9200:9200
  #   networks:
  #     - es761net
  # elasticsearch2:
  #   image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
  #   container_name: es761_02
  #   environment:
  #     - cluster.name=yxes
  #     - node.name=es761_02
  #     - bootstrap.memory_lock=true
  #     - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  #     - discovery.seed_hosts=es761_01,es761_02
  #     - network.publish_host=elasticsearch
  #     - cluster.initial_master_nodes=es761_01,es761_02
  #   ulimits:
  #     memlock:
  #       soft: -1
  #       hard: -1
  #   volumes:
  #     - /Users/admin/home/docker/mapping/esstack/es/es761_02:/usr/share/elasticsearch/data
  #   networks:
  #     - es761net
  cerebro:
    image: lmenezes/cerebro:0.8.5
    container_name: cerebro
    ports:
      - "9000:9000"
    command:
      - -Dhosts.0.host=http://elasticsearch:9200
    networks:
      - es761net
  kibana:
    image: docker.elastic.co/kibana/kibana:7.6.1
    container_name: kibana761
    environment:
      - I18N_LOCALE=zh-CN
      - XPACK_GRAPH_ENABLED=true
      - TIMELION_ENABLED=true
      - XPACK_MONITORING_COLLECTION_ENABLED="true"
    ports:
      - "5601:5601"
    networks:
      - es761net

networks:
  es761net:
    driver: bridge

由于本子内存问题,这里就不启动多个es节点,只启动一个。

简单说明下yml文件中的组成:

a)networks是创建一个网络,然后将es、kibana、cerebro都加入同一个网络,这样在docker中他们网络就互通了。

b)指定的image,在docker中必须先pull对一个tag的image(已有可以忽略这一步)。

c)volumes,是宿主机目录与docker容器中目录映射,这样在本地文件夹中操作文件,容器中也跟着变化。

注意:如果docker容器目录中存在文件,目录又要做映射的话,需要先将文件copy出来,具体命令是:

docker cp container_id:/dockerfilepath/config/ /localfilepath/config/

2、运行准备好的docker-compose.yml文件

有两种方式:

a)进入到docker-compose.yml同级目录运行:docker-compose docker-compose.yml up -d

b)任务目录运行:docker-compose -f /Users/admin/Desktop/docker-compose-es.yml up -d

-d的意思表示在后台运行,控制台不输出日志。

docker-compose命令:

docker-compose up		启动容器、执行该命令需在同级目录
docker-compose down		停止容器
docker-compose down -v	停止容器并移除数据
docker-compose -f xxx/docker-compose.yml up -d 后台启动容器,-f指定docker-compose文件路径

执行完docker-compose up命令后,就可以通过docker ps查看已经运行的容器:

如果没有看到容器,表示启动失败,可以在启动的时候不加-d命令,则可以看到启动信息,方便排查错误。

三个都运行成功后的界面如下:

es:9200端口

docker容器技术应用-docker-compose运行Elasticsearch_第1张图片

cerebro:9000端口

docker容器技术应用-docker-compose运行Elasticsearch_第2张图片

kibana:5601端口

docker容器技术应用-docker-compose运行Elasticsearch_第3张图片

你可能感兴趣的:(Docker,java)