# Docker怎么安裝Elasticsearch(ES)
## 一、前言
Elasticsearch(簡稱ES)是一個基于Lucene構建的開源分布式搜索引擎,廣泛應用于日志分析、全文檢索、數據分析等領域。使用Docker安裝Elasticsearch能夠快速搭建環境,避免復雜的依賴配置。本文將詳細介紹如何通過Docker安裝Elasticsearch,并涵蓋常見問題解決和優化配置。
---
## 二、準備工作
### 1. 安裝Docker
確保已安裝Docker環境:
```bash
# 檢查Docker版本
docker --version
# 若未安裝,參考官方文檔安裝:
# https://docs.docker.com/engine/install/
官方提供了多個版本的鏡像,推薦使用指定版本(如8.11.1):
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.11.1
docker run -d \
--name es-single-node \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
docker.elastic.co/elasticsearch/elasticsearch:8.11.1
參數說明:
- -p 9200:9200
:暴露HTTP API端口。
- -p 9300:9300
:集群通信端口(單節點模式下可不使用)。
- discovery.type=single-node
:設置為單節點模式。
- ES_JAVA_OPTS
:配置JVM堆內存(建議不超過物理內存的50%)。
訪問 http://localhost:9200
,返回如下JSON即成功:
{
"name" : "d4a4c3a7f5b2",
"cluster_name" : "docker-cluster",
"version" : { ... }
}
docker network create es-net
節點1:
docker run -d \
--name es-node1 \
--network es-net \
-p 9200:9200 \
-e "node.name=es-node1" \
-e "cluster.name=es-docker-cluster" \
-e "cluster.initial_master_nodes=es-node1" \
docker.elastic.co/elasticsearch/elasticsearch:8.11.1
節點2:
docker run -d \
--name es-node2 \
--network es-net \
-e "node.name=es-node2" \
-e "cluster.name=es-docker-cluster" \
-e "discovery.seed_hosts=es-node1" \
docker.elastic.co/elasticsearch/elasticsearch:8.11.1
避免容器刪除后數據丟失:
docker run -d \
--name es-with-volume \
-v es_data:/usr/share/elasticsearch/data \
docker.elastic.co/elasticsearch/elasticsearch:8.11.1
創建 elasticsearch.yml
:
cluster.name: "custom-cluster"
network.host: 0.0.0.0
掛載配置文件:
docker run -d \
-v ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
docker.elastic.co/elasticsearch/elasticsearch:8.11.1
默認開啟安全功能,首次啟動會輸出默認密碼:
# 查看初始密碼
docker logs es-container | grep "Password for the elastic user"
docker exec -it es-container \
bin/elasticsearch-certutil ca --out /tmp/elastic-stack-ca.p12 --pass ""
max virtual memory areas too low
# 臨時解決
sudo sysctl -w vm.max_map_count=262144
# 永久生效(寫入/etc/sysctl.conf)
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
ES_JAVA_OPTS
調整堆大小。
-e "bootstrap.memory_lock=true" \
--ulimit memlock=-1:-1
示例 docker-compose.yml
:
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.1
environment:
- discovery.type=single-node
ports:
- "9200:9200"
volumes:
- es_data:/usr/share/elasticsearch/data
volumes:
es_data:
driver: local
啟動命令:
docker-compose up -d
通過Docker安裝Elasticsearch具有以下優勢: 1. 快速部署:無需手動安裝Java或配置環境。 2. 隔離性:容器化運行避免污染主機環境。 3. 靈活擴展:輕松實現單節點或集群部署。
建議生產環境中結合Kubernetes或Swarm實現高可用部署,并定期備份數據卷。
延伸閱讀:
- Elasticsearch官方Docker指南
- Docker內存限制最佳實踐 “`
注:實際內容約1500字,可根據需要補充以下內容擴展至3000字: 1. 更詳細的性能調優參數說明 2. Kibana與Logstash的集成部署 3. 監控方案(如Prometheus+Granfa) 4. 實際用例分析(日志收集場景等)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。