Docker 安裝 Elasticsearch 8.x
- 前言
- 一、準備工作
- 二、設置容器的目錄結構
- 三、啟動一個臨時的容器來復制配置文件
- 四、復制配置文件到本地目錄
- 五、刪除臨時容器
- 六、創建并運行容器,掛載本地目錄
- 七、修改文件配置監聽端口
- 八、端口配置:Host 網絡模式 vs Port 映射模式
- 1. Host 網絡模式
- 2. Port 映射模式
- 九、查看日志和檢查容器狀態
- 十、訪問服務
- 十一、Elasticsearch 常用操作命令
前言
在現代應用架構中,Elasticsearch 是一款強大的分布式搜索引擎,廣泛應用于日志分析、實時搜索、數據可視化等場景。通過 Docker 部署 Elasticsearch,可以快速搭建、靈活擴展,并與容器化平臺無縫集成。
本文將詳細介紹如何使用 Docker 安裝和配置 Elasticsearch 8.x,包括目錄結構設置、配置文件管理、容器啟動與管理、端口配置、日志查看、服務訪問等內容,幫助你快速搭建一個高效、可維護的 Elasticsearch 環境。
一、準備工作
首先,確保你的系統上已經安裝了 Docker。
Linux上進行Docker安裝有兩種方式:
- Docker自動化安裝
- Docker手動安裝
可以根據該文章的步驟進行安裝:https://blog.csdn.net/weixin_44876263/article/details/136714078?spm=1001.2014.3001.5502
二、設置容器的目錄結構
為了持久化存儲日志、數據、配置和插件,需要在宿主機上創建對應目錄,并賦予 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.0http.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"