Docker 下安装 Elasticsearch 和 Kibana

237 阅读3分钟

1. 配置系统内核参数

以下命令是针对虚拟内存区域的最大数量的配置,用于 ElasticsearchMongoDB 等需要大量内存映射的程序,不修改的话 Elasticsearch 可能无法启动。

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

2. 创建相关目录和文件

2.1 创建目录

  • plugins:存放 ES 的插件
  • data:存放 ES 的数据
  • config 存放 ES 的配置目录
mkdir -p <ES 主目录>/es/{plugins,data,config}
mkdir -p <ES 主目录>/kibana/config/

2.2 创建配置文件

<ES 配置目录> 下创建 elasticsearch.yml 文件,并编写:

# 配置 host 为 0.0.0.0 允许远程访问
http.host: 0.0.0.0
# 跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"
# http.cors.allow-headers: Authorization
# 密码访问
xpack.security.enabled: false
xpack.security.transport.ssl.enabled: false

xpack.security.enabled 为 false 不建议生产环境使用!!!!

开启安全功能请参考:blog.csdn.net/UbuntuTouch…

3. Docker Compose 部署

3.1 配置 Docker Compose 文件

docker.elastic.co 代替默认的 docker.io,以防出现无法 pull 的情况。同理 docker.m.daocloud.io 是为了防止 Kibana 无法 pull 情况。

services:
  es:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.12.2
    container_name: es
    restart: always
    networks:
      - es-net
    ports:
      - 9200:9200
      - 9300:9300
    volumes:
      - ./es/data:/usr/share/elasticsearch/data
      - ./es/plugins:/usr/share/elasticsearch/plugins
      - ./es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms512m -Xmx512m
      - ELASTIC_PASSWORD=<ES 管理密码>
      - TZ=Asia/Shanghai
    mem_limit: 1g
    
  kibana:
    image: docker.m.daocloud.io/kibana:8.12.2
    container_name: kibana
    restart: always
    networks:
      - es-net
    ports:
      - 5601:5601
    environment:
      - ELASTICSEARCH_HOSTS=http://es:9200

volumes:
  es-data:
  es-plugins:

networks:
  es-net:

3.3 部署容器

docker compose up -d

3.4 检查容器状态

docker compose ps
# docker compose ps
NAME      IMAGE                                                  COMMAND                  SERVICE   CREATED        STATUS        PORTS
es        docker.elastic.co/elasticsearch/elasticsearch:8.12.2   "/bin/tini -- /usr/l…"   es        45 hours ago   Up 45 hours   0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp
kibana    kibana:8.6.0                                           "/bin/tini -- /usr/l…"   kibana    45 hours ago   Up 45 hours   0.0.0.0:5601->5601/tcp, :::5601->5601/tcp

4. 配置防火墙

Centos

# 放行 9200 端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent

# 放行 ES 集群间通信 9300 端口
firewall-cmd --zone=public --add-port=9300/tcp --permanent

# 放行 Kibana 5601 端口
firewall-cmd --zone=public --add-port=5601/tcp --permanent

# 重载防火墙
firewall-cmd --reload

# 查看放行的公共端口列表
firewall-cmd --zone=public --list-ports

Ubuntu

ufw allow 9200/tcp
sudo ufw allow 9300/tcp
sudo ufw allow 5601/tcp
sudo ufw reload
sudo ufw status

5. 测试访问

5.1 测试 ES 访问

curl http://localhost:9200
# curl -v http://localhost:9200
* About to connect() to localhost port 9200 (#0)
*   Trying ::1...
* Connected to localhost (::1) port 9200 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost:9200
> Accept: */*
>
< HTTP/1.1 200 OK
< X-elastic-product: Elasticsearch
< content-type: application/json
< content-length: 539
<
{
  "name" : "53ab12ecdbf5",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "licGU_6HRR2Qnc6ACBD6Jw",
  "version" : {
    "number" : "8.12.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "48a287ab9497e852de30327444b0809e55d46466",
    "build_date" : "2024-02-19T10:04:32.774273190Z",
    "build_snapshot" : false,
    "lucene_version" : "9.9.2",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}
* Connection #0 to host localhost left intact

5.2 测试 Kibana 访问

浏览器访问 http://<ip>:5601

image.png

有可能出现 This Elastic installation has strict security ...

如果出现了,那么请创建并映射 Kibana 容器路径 /usr/share/kibana/config/kibana.yml

server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
csp.strict: false

6. 配置插件

6.1 分词器插件

6.1.1 安装分词器插件

使用 ES 在线安装大概率无法下载,所以这里就不推荐在线安装了。

分词器链接 github.com/infinilabs/…

这里选的是 8.12.2 版本:

image.png

下载完成后上传到 <ES 主目录> 然后解压到 es/plugins/ik 目录:

mkdir -p plugins/ik
unzip elasticsearch-analysis-ik-8.12.2.zip plugins/ik

6.2 中文拼音插件

6.2.1 安装中文拼音插件

github.com/infinilabs/…

步骤同上

6.2 重启容器:

docker restart es

6.3 测试分词器

打开 Kibana 并找到开发工具:

image.png

GET _analyze
{
  "analyzer": "ik_smart",
  "text":["我喜欢喝雪碧"]
}

image.png