# Docker ElasticSearch

docker hub 的 https://hub.docker.com/_/elasticsearch (opens new window)

当前(2021-04-02)的 7 版本最新的是 7.12.0 ,6 版本最新的是 6.8.15(没有 latest 版本)

警告

支持 Window 7 操作系统的最后一个 es 版本是 7.10.2再高你就要换系统了。 但是 docker 镜像里只有 7.10.1 版本。

# 1. 安装及测试

# 查询中央仓库
docker search -f is-official=true elasticsearch

# 从中央仓库下载
docker pull elasticsearch:7.10.1

# 或,直接导入已有的镜像文件
# docker load -i elasticsearch-7.10.1.tar

# 查看本地镜像
docker images

# 会出现类似以下内容:
# REPOSITORY      TAG       IMAGE ID       CREATED        SIZE
# elasticsearch   7.10.1    558380375f1a   8 months ago   774MB

运行容器:

  • 删除曾经已有的同名容器

    docker rm -f es-test
    
  • 创建并运行 elasticsearch 容器的语法

    docker 运行 elasticsearch 时,有可能会报如下错误:

    max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    

    解决办法是:在 /etc/sysctl.conf 文件最后添加一行:vm.max_map_count=262144 后执行命令 sysctl -p

    echo "vm.max_map_count=262144" >> /etc/sysctl.conf
    

    运行 es

    docker run \
      -d \
      --name <指定容器名> \
      -p <指定宿主机端口>:9200 \
      -p <指定宿主机端口>:9300 \
      -e "discovery.type=single-node" \
      -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
      elasticsearch:7.10.1
    

    -e "discovery.type=single-node":表示单节点运行。

    -e ES_JAVA_OPTS="-Xms256m -Xmx256m":设置初始内存和最大内存。

    例如:

    docker run \
      -d \
      --name es-test \
      -p 9200:9200 \
      -p 9300:9300 \
      -e "discovery.type=single-node" \
      -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
      elasticsearch:7.10.1
    

验证安装成功

  • 通过 docker ps 查看容器的运行信息:

    docker ps
    

    会看到类似如下信息:

  • 访问网址 http://主机IP:9200/会有一点点延迟,会看到类似如下内容:

    {
      "name" : "dc1ef18d9e47",
      "cluster_name" : "docker-cluster",
      "cluster_uuid" : "j99YYT-CRISTsoxgXEB6MA",
      "version" : {
        "number" : "6.8.5",
        "build_flavor" : "default",
        "build_type" : "docker",
        "build_hash" : "2f90bbf7b93631e52bafb59b3b049cb44ec25e96",
        "build_date" : "2019-10-28T20:40:44.881551Z",
        "build_snapshot" : false,
        "lucene_version" : "8.2.0",
        "minimum_wire_compatibility_version" : "6.8.0",
        "minimum_index_compatibility_version" : "6.0.0-beta1"
      },
      "tagline" : "You Know, for Search"
    }
    

# 2. 配置与挂载

  • Docker ES Server 的数据的存储目录是容器内部的 /usr/share/elasticsearch/data

  • Docker ES Server 的配置文件是容器内部的 /usr/share/elasticsearch/config/elasticsearch.yml

    该配置文件的内容只有 2 行:

    cluster.name: "docker-cluster"
    network.host: 0.0.0.0
    
  • 示例

    # 删除曾经已有的同名容器
    docker rm -f es-9200
    
    # 创建本机挂载目录
    mkdir -p ~/docker/9200/data
    touch ~/docker/9200/config/elasticsearch.yml
    
    # 创建并运行容器
    docker run \
      -d \
      --name es-9200 \
      -p 9200:9200 \
      -p 9300:9300 \
      -v ~/docker/9200/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
      -v ~/docker/9200/data:/usr/share/elasticsearch/data \
      -v ~/docker/9200/plugins:/usr/share/elasticsearch/plugins \
      -e "discovery.type=single-node" \
      -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
      elasticsearch:7.10.1
    

# 3. 通过 docker-compose 启动

version: '3'

services:
  elasticsearch:
    image: elasticsearch:7.10.1
    container_name: es
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms512m -Xmx512m
    volumes:
      - ~/docker/es/9200/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - ~/docker/es/9200/data:/usr/share/elasticsearch/data
      - ~/docker/es/9200/plugins:/usr/share/elasticsearch/plugins
    ports:
      - "9200:9200"
      - "9300:9300"