Docker Compose 本地环境搭建:elasticsearch
- [🔗 前言:Docker Compose 本地环境搭建相关文章](#🔗 前言:Docker Compose 本地环境搭建相关文章)
- [🐳 Docker Compose 本地环境搭建:elasticsearch](#🐳 Docker Compose 本地环境搭建:elasticsearch)
-
- [📚 目录结构设计](#📚 目录结构设计)
- [📄 docker-compose.yml](#📄 docker-compose.yml)
- [🚀 启动方式](#🚀 启动方式)
- [✂️ IK 分词器安装](#✂️ IK 分词器安装)
- [🌐 访问测试](#🌐 访问测试)
🔗 前言:Docker Compose 本地环境搭建相关文章
🐳 Docker Compose 本地环境搭建:elasticsearch
📚 目录结构设计
推荐使用如下结构:
bash
infra/
├── .env
├── mysql/
│ └── docker-compose.yml
├── redis/
│ └── docker-compose.yml
├── elasticsearch/
│ └── docker-compose.yml
├── skywalking/
│ └── docker-compose.yml
├── nacos/
│ └── docker-compose.yml
📄 docker-compose.yml
bash
# =========================================================
# 用于构建环境:Elasticsearch
# 宿主机挂载目录、端口、密码、版本号、环境后缀均通过 .env 文件管理
# =========================================================
###########################################################
# 网络配置
###########################################################
networks:
env_network: # 内部网络标识固定
driver: bridge
name: ${NETWORK_NAME} # Docker 实际网络名动态生成
ipam:
config:
- subnet: ${NETWORK_SUBNET} # 子网从 .env 获取
###########################################################
# 卷(Volume)配置
###########################################################
volumes:
# Elasticsearch
es_data:
driver: local
driver_opts:
type: none
device: ${HOST_VOLUME}/${ENV}/ElasticSearch8/data
o: bind
es_logs:
driver: local
driver_opts:
type: none
device: ${HOST_VOLUME}/${ENV}/ElasticSearch8/logs
o: bind
###########################################################
# 服务定义
###########################################################
services:
# Elasticsearch
elasticsearch:
image: elasticsearch:${ES_VERSION}
container_name: elasticsearch_${ES_VERSION}_${ENV}
networks:
- env_network
ports:
- "${ES_PORT_HTTP}:9200"
- "${ES_PORT_TRANSPORT}:9300"
environment:
discovery.type: single-node
ELASTIC_PASSWORD: ${ES_PASSWORD}
xpack.security.enabled: "true"
# 防止再被 flood-stage 锁死
cluster.routing.allocation.disk.watermark.low: "90%"
cluster.routing.allocation.disk.watermark.high: "95%"
cluster.routing.allocation.disk.watermark.flood_stage: "97%"
volumes:
- es_data:/usr/share/elasticsearch/data
- es_logs:/usr/share/elasticsearch/logs
healthcheck:
test:
[
"CMD-SHELL",
"curl -sf -u elastic:${ES_PASSWORD} http://localhost:9200 >/dev/null || exit 1"
]
# 两次健康检查之间的间隔
interval: 10s
# 单次健康检查的最大执行时间
timeout: 5s
# 允许连续失败多少次
retries: 30
# 启动宽限期,在这段时间内,健康检查失败不会被算作失败,成功直接 healthy
start_period: 300s
restart: unless-stopped
labels:
env: ${ENV}
version: ${ES_VERSION}
service: elasticsearch_${ENV}
🚀 启动方式
在 .env 同级目录下执行
bash
docker compose --env-file .env -f elasticsearch/docker-compose.yml up -d
- -d 表示 后台运行
- Compose 会:
- 自动读取 .env 文件里的变量
- 根据 docker-compose.yml 配置创建网络、卷和容器
- 容器名、端口、挂载目录都会根据 .env 替换
✂️ IK 分词器安装
进入容器安装插件(避免重启重复安装):
bash
docker exec -it elasticsearch_8.18.8_dev bash
执行安装 IK分词器 命令
bash
elasticsearch-plugin install --batch https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-8.18.8.zip
🌐 访问测试
