Docker 启动 Elastic
开启安全模式
docker network create elastic docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.0 # 容器用户 elasticsearch,uid:gid 1000:0,映射的文件该用户必须可读,映射的数据和日志目录必须可写入。不是每台服务器都有 elasticsearch 用户,直接用 1000 就可以了 chown 1000:0 /home/elasticsearch/data # Elastic8 默认已开启安全模式,不仅要账号密码登录,调用 RestAPI 接口是 https,要CA证书。 # 默认情况下,启动容器将自动生成密钥库文件以进行安全设置。该文件已被混淆但未加密。 docker run -it --rm --name es01 --net elastic -p 9200:9200 -m 1GB -v /home/elasticsearch/data:/usr/share/elasticsearch/data docker.elastic.co/elasticsearch/elasticsearch:8.12.0 # 上面命令会打印一个 elastic 用户密码和一个用于 kibana 的注册 token,也可以单独使用下面命令生成 docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana # 从容器中拷贝 SSL 证书到本地机器 docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt . # 拷出来后映射这个证书文件,然后重启下 docker run -it --rm --name es01 --net elastic -p 9200:9200 -m 1GB -v /home/elasticsearch/http_ca.crt:/usr/share/elasticsearch/config/certs/http_ca.crt -v /home/elasticsearch/data:/usr/share/elasticsearch/data docker.elastic.co/elasticsearch/elasticsearch:8.12.0 # 使用 REST API 测试 ES 容器是否已起来,必须用 localhost 来测,否则会报错:requested domain name does not match the server's certificate export ELASTIC_PASSWORD="zq*aBSBO4mFhhzu*LxnT" curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200 # 没问题后启动 Kibana(起来后,访问打印出的链接,输入 Enrollment token 后还要输入 Elastic 的账号密码) docker pull docker.elastic.co/kibana/kibana:8.12.0 docker run --rm --name kib01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.12.0 # 【可选】若想导出 Elastic 配置,可以使用这个命令 docker cp es01:/usr/share/elasticsearch/config/elasticsearch.yml .
使用 Docker 环境变量来配置 Elasitc 参数,请参考:Install Elasticsearch with Docker
禁用安全模式
docker network create elastic docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.0 # 容器用户 elasticsearch,uid:gid 1000:0,映射的文件该用户必须可读,映射的数据和日志目录必须可写入。不是每台服务器都有 elasticsearch 用户,直接用 1000 就可以了 chown 1000:0 /home/elasticsearch/data # 启动Elastic,禁用安全认证 docker run -it --rm --name es01 --net elastic -p 9200:9200 -m 1GB -e "discovery.type=single-node" -e "xpack.security.enabled=false" -v /home/elasticsearch/data:/usr/share/elasticsearch/data docker.elastic.co/elasticsearch/elasticsearch:8.12.0 # 测试 http 服务是否可用 curl http://192.168.3.222:9200 # 没问题后,启用 Kibana(无需映射 Volumns,都存在 Elastic 数据目录中) docker run --rm --name kib01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.12.0
Kibana 起来后,访问打印出的链接,点 “Configure manually” 跳过 Enrollment token 输入,填正确的 Elastic 访问地址即可进入 Kibana。
启动容器时,如果禁用安全认证,会报错:the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
,解决办法:容器启动时添加 -e “discovery.type=single-node”。
仅禁用 Https
# 启动 Elastic,仅禁用 https,不禁用安全认证。此时必须要用账号密码登录,但是 ELASTIC_USERNAME 环境变量必须设置 elastic,改成其他的不管用的,也可以不设置此环境变量,默认用户就是 elastic docker run -it --rm --name es01 --net elastic -p 9200:9200 -m 1GB -e "discovery.type=single-node" -e xpack.security.http.ssl.enabled=false -e xpack.security.transport.ssl.enabled=false -e ELASTIC_USERNAME=elastic -e "ELASTIC_PASSWORD=DkIedPPSCb" docker.elastic.co/elasticsearch/elasticsearch:8.12.0 # 测试 http 服务是否可用 curl -XGET -u "elastic:DkIedPPSCb" http://192.168.3.222:9200?pretty # 没问题后,启用 Kibana(启动会报错:elastic 是 superuser 账号,无法写入Kibana需要运行的系统索引,请改用服务帐户令牌,暂时未处理,有空再研究了) docker run --rm --name kib01 --net elastic -p 5601:5601 -e ELASTICSEARCH_USERNAME=elastic -e "ELASTICSEARCH_PASSWORD=DkIedPPSCb" docker.elastic.co/kibana/kibana:8.12.0
elasticsearch-java 客户端
在使用 Elasticsearch 时,常用 Kibana 以交互方式准备和测试查询、聚合、索引映射和其他复杂的API调用,这将产生您可能希望在应用程序中使用的工作 JSON 片段。
因此 Java API 客户端中的大多数数据类都可以从JSON文本加载:对象构建器具有从原始JSON填充构建器的withJson()方法,参考:Creating API objects from JSON data。