前言
在现代应用架构中,elasticsearch 是一款强大的分布式搜索引擎,广泛应用于日志分析、实时搜索、数据可视化等场景。通过 docker 部署 elasticsearch,可以快速搭建、灵活扩展,并与容器化平台无缝集成。
本文将详细介绍如何使用 docker 安装和配置 elasticsearch 8.x,包括目录结构设置、配置文件管理、容器启动与管理、端口配置、日志查看、服务访问等内容,帮助你快速搭建一个高效、可维护的 elasticsearch 环境。
一、准备工作
首先,确保你的系统上已经安装了 docker。
linux上进行docker安装有两种方式:
- docker自动化安装
- docker手动安装
可以根据该文章的步骤进行安装:https://www.jb51.net/server/322968bze.htm
二、设置容器的目录结构
为了持久化存储日志、数据、配置和插件,需要在宿主机上创建对应目录,并赋予 elasticsearch 容器内部用户的写权限。
# 安装路径 dir="/opt/docker/demo" docker_name="docker-elasticsearch" # 创建目录结构 mkdir -p "$dir/elasticsearch/logs" mkdir -p "$dir/elasticsearch/data" mkdir -p "$dir/elasticsearch/config" mkdir -p "$dir/elasticsearch/plugins" # 赋予文件权限 chmod -r 777 $dir/elasticsearch/
三、启动一个临时的容器来复制配置文件
启动一个临时的 elasticsearch 容器,用于复制默认配置文件到宿主机。
docker run -d \ --restart=always \ --name elasticsearch \ --network host \ -p 9388:9200 \ -p 9389:9300 \ --privileged \ -e "discovery.type=single-node" \ -e "es_java_opts=-xms2g -xmx2g" \ docker.elastic.co/elasticsearch/elasticsearch:8.17.0
四、复制配置文件到本地目录
将容器中的配置文件复制到宿主机的对应目录。
docker cp elasticsearch:/usr/share/elasticsearch/data $dir/elasticsearch/ docker cp elasticsearch:/usr/share/elasticsearch/plugins $dir/elasticsearch/ docker cp elasticsearch:/usr/share/elasticsearch/config $dir/elasticsearch/ docker cp elasticsearch:/usr/share/elasticsearch/logs $dir/elasticsearch/
五、删除临时容器
docker stop elasticsearch docker rm elasticsearch
六、创建并运行容器,挂载本地目录
使用以下命令启动 elasticsearch 容器,并挂载本地目录。
docker run -d \ --name "$docker_name" \ --restart=always \ --network host \ -v "$dir/elasticsearch/data:/usr/share/elasticsearch/data" \ -v "$dir/elasticsearch/plugins:/usr/share/elasticsearch/plugins" \ -v "$dir/elasticsearch/config:/usr/share/elasticsearch/config" \ -v "$dir/elasticsearch/logs:/usr/share/elasticsearch/logs" \ -e "discovery.type=single-node" \ -e "es_java_opts=-xms2g -xmx2g" \ -e "elastic_password=123456" \ docker.elastic.co/elasticsearch/elasticsearch:8.17.0
七、修改文件配置监听端口
修改配置文件 $dir/elasticsearch/config/elasticsearch.yml
cluster.name: "docker-cluster" network.host: 0.0.0.0 http.port: 9200
八、端口配置:host 网络模式 vs port 映射模式
1. host 网络模式
docker run -d \ --restart=always \ --name "$docker_name" \ --network host \ -v "$dir/elasticsearch/data:/usr/share/elasticsearch/data" \ -v "$dir/elasticsearch/plugins:/usr/share/elasticsearch/plugins" \ -v "$dir/elasticsearch/config:/usr/share/elasticsearch/config" \ -v "$dir/elasticsearch/logs:/usr/share/elasticsearch/logs" \ -e "discovery.type=single-node" \ -e "es_java_opts=-xms2g -xmx2g" \ -e "elastic_password=123456" \ docker.elastic.co/elasticsearch/elasticsearch:8.17.0
特点:
在 host 网络模式下,容器共享宿主机的网络栈,容器内的网络接口直接映射到宿主机的网络接口。这意味着容器可以使用宿主机的 ip 地址和端口进行通信。对于 elasticsearch 来说,使用 host 网络模式可以减少网络延迟,提高性能。
优点:
简化网络配置,无需额外的
-p
端口映射。延迟更低,吞吐更高。
缺点:
与宿主机完全共享端口,若宿主机已有同端口服务运行,会冲突。
安全隔离较弱,容器网络直接暴露给宿主机。
2. port 映射模式
docker run -d \ --restart=always \ --name "$docker_name" \ -p 9201:9200 \ -p 9301:9300 \ -v "$dir/elasticsearch/data:/usr/share/elasticsearch/data" \ -v "$dir/elasticsearch/plugins:/usr/share/elasticsearch/plugins" \ -v "$dir/elasticsearch/config:/usr/share/elasticsearch/config" \ -v "$dir/elasticsearch/logs:/usr/share/elasticsearch/logs" \ -e "discovery.type=single-node" \ -e "es_java_opts=-xms2g -xmx2g" \ -e "elastic_password=123456" \ docker.elastic.co/elasticsearch/elasticsearch:8.17.0
特点:
在 port 映射模式下,容器使用 docker 的默认桥接网络,容器内的端口通过宿主机的端口进行映射。这种方式适用于需要将容器服务暴露给外部访问的场景。例如,将容器的 9200 端口映射到宿主机的 9201 端口。
优点:
容器与宿主机网络隔离,提高安全性。
可以在同一宿主机上运行多个容器,避免端口冲突。
缺点:
可能增加网络延迟,影响性能。
需要手动配置端口映射,增加配置复杂度。
九、查看日志和检查容器状态
使用以下命令查看 elasticsearch 容器的日志:
docker logs -f "$docker_name"
要查看容器的状态,可以使用:
docker ps -a
如果容器未运行,可以使用以下命令启动:
docker start "$docker_name"
十、访问服务
在浏览器中访问以下地址,检查 elasticsearch 是否正常运行默认的用户名为:elastic
密码:123456
http://localhost:9200
如果使用了 port 映射模式,并将容器的 9200 端口映射到宿主机的 9201 端口,则应访问:
http://localhost:9201
应该看到类似以下的 json 响应:
{ "name" : "docker-cluster", "cluster_name" : "docker-cluster", "cluster_uuid" : "abcdefghijklmno", "version" : { "number" : "8.17.0", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "1234567890abcdef", "build_date" : "2025-04-15t12:34:56.789z", "build_snapshot" : false, "lucene_version" : "8.10.0", "minimum_wire_compatibility_version" : "7.10.0", "minimum_index_compatibility_version" : "7.10.0" }, "tagline" : "you know, for search" }
十一、elasticsearch 常用操作命令
检查集群健康状态
使用以下命令检查 elasticsearch 集群的健康状态:
curl -x get "localhost:9200/_cluster/health?pretty"
查看所有索引
使用以下命令检查 elasticsearch 集群的健康状态:
curl -x get "localhost:9200/_cat/indices?v"
创建索引
使用以下命令创建一个新的索引:
curl -x put "localhost:9200/my_index"
删除索引
使用以下命令删除指定的索引:
curl -x delete "localhost:9200/my_index"
查询索引中的所有文档
使用以下命令查询索引中的所有文档:
curl -x get "localhost:9200/my_index/_search?q=*:*
修改用户密码
elasticsearch 提供了 elasticsearch-reset-password
工具,用于重置用户密码。例如,重置 elastic 用户的密码:
docker exec -it elasticsearch bin/elasticsearch-reset-password -u elastic
执行后,系统将提示输入新密码并确认。请确保在生产环境中妥善保管密码。
查看集群节点信息
curl -x get "localhost:9200/_cat/nodes?v"
查看集群分片分配情况
curl -x get "localhost:9200/_cat/shards?v"
查看集群所有分配情况
curl -x get "localhost:9200/_cat/allocation?v"
查看索引文档数量
curl -x get "localhost:9200/my_index/_count"
到此这篇关于docker 安装 elasticsearch 8.x的文章就介绍到这了,更多相关docker 安装 elasticsearch 8.x内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论