Docker Insert Elasticsearch Quickstart

安装 Elasticsearch

  1. 拉取镜像
1
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.16.1
  1. 运行 Elasticsearch 容器
1
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch -e ES_JAVA_OPTS="-Xms4G -Xmx4G" -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.16.1

参数说明:

  • -d:在后台运行容器。
  • -p 9200:9200:将容器的 9200 端口映射到宿主机的 9200 端口,这是 Elasticsearch 的 HTTP 端口,用于 REST API。
  • -p 9300:9300:将容器的 9300 端口映射到宿主机的 9300 端口,这是节点间通信的端口。
  • –name elasticsearch:给容器指定一个名字,这里命名为 elasticsearch。
  • -e “discovery.type=single-node”:设置 Elasticsearch 为单节点模式,这对于测试和开发环境很有用。在生产环境中,应该使用不同的集群发现机制,如通过配置 elasticsearch.yml 文件。
  • -v /path/to/your/data:/usr/share/elasticsearch/data 配置持久化存储
  • -e ES_JAVA_OPTS="-Xms4G -Xmx4G" 设置JVM内存4G大小,生产环境应该根据实际情况进行配置,如果不设置,则默认使用256M内存,很容易内存溢出奔溃。
  1. 验证 Elasticsearch 是否运行
1
curl -X GET "http://localhost:9200/"
  1. 修改Elasticsearch配置信息

创建一个名为 elasticsearch.yml 的文件,并添加以下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
cluster.name: "docker-cluster"
network.host: 0.0.0.0

# 配置远程访问
http.host: 0.0.0.0

# 因为elasticsearch与elasticsearch-head工具是前后端分离项目,所以需要处理跨域问题
http.cors.enabled: true
http.cors.allow-origin: "*"  # 允许所有源,生产环境不建议使用 "*"
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers: X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization

# 开启账户密码验证
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

将修改后的文件覆盖到容器内

1
docker cp ./elasticsearch.yml eselasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml

重启elasticsearch

1
docker restart eselasticsearch
  1. 设置用户的密码

进入容器

1
2
3
4
docker exec -it elasticsearch bash

# 设置elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user 这些用户的密码
bin/elasticsearch-setup-passwords interactive

参考