一、安装镜像
- elasticsearch:
docker pull elasticsearch:7.6.2
- kibana:
docker pull kibana:7.6.2
- 安装完后会自动创建elasticsearch和kibana的docker镜像。查看镜像列表:
docker images
二、部署es容器
创建专业网络
docker network create esnet
docker run -d \
--name es_database \
--network esnet \
-e "ES_JAVA_OPTS=-Xms2g -Xmx2g" \
-e "discovery.type=single-node" \
-v /data/docker-data/elasticsearch/data:/usr/share/elasticsearch/data \
-v /data/docker-data/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /data/docker-data/elasticsearch/logs:/usr/share/elasticsearch/logs \
--privileged \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:8.8.1
命令解释: –name es_database:容器名称 -e “ES_JAVA_OPTS=-Xms512m -Xmx512m”:内存大小 -e “discovery.type=single-node”:非集群模式(单点) -v /data/docker-data/elasticsearch/data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录。es-data是目录名称,/usr/share/elasticsearch/data是容器内目录 -v /data/docker-data/elasticsearch/plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录。es-plugins是目录名称,/usr/share/elasticsearch/plugins是容器内目录 –privileged:授予逻辑卷访问权 -p 9200:9200:端口映射配置 elasticsearch:7.6.2:镜像名称
es8.0以上默认开启了 ssl 认证, 直接访问 : http://127.0.0.1:9200 是无法访问的,需要访问 https, 或者关闭 SSL认证
自Elasticsearch 7.8.0版本开始,Elasticsearch 不再提供默认的用户名和密码。相反,它采用了内置安全特性,并引入了超级用户(superuser)角色和内置用户(built-in users)概念来管理访问控制。
在新安装的情况下,您需要设置一个初始的内置用户以及相关的登录凭据。可以通过修改 Elasticsearch 的配置文件(elasticsearch.yml)来完成此操作。以下是一个示例:
Docker ElastIcSearch容器配置文件路径
# 进入容器 -u 0 root用户进去
docker exec -it -u 0 es_database bash
# 找到配置文件路径
cd /usr/share/elasticsearch/config
vim 打开 elasticsearch.yml 文件 找到 xpack.security.enabled: true 改为 xpack.security.enabled: false,这样就可以直接 使用http访问,并且不需要账号密码鉴权,这个设置看个人情况,如果是生产环境建议开始开启 https和账号密码鉴权
cluster.name: "docker-cluster"
network.host: 0.0.0.0
#----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------
#
# The following settings, TLS certificates, and keys have been automatically
# generated to configure Elasticsearch security features on 10-12-2023 06:04:19
#
# --------------------------------------------------------------------------------
# Enable security features
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:
enabled: false
keystore.path: certs/http.p12
# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:
enabled: false
verification_mode: certificate
keystore.path: certs/transport.p12
truststore.path: certs/transport.p12
#----------------------- END SECURITY AUTO CONFIGURATION -------------------------
重启容器
docker restart es_database
在浏览器中输入“http://127.0.0.1:9200”,如果显示以下内容则部署成功。
{
"name" : "7afaebc44766",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "V4uv31l-T4q3qroiM6iaGg",
"version" : {
"number" : "8.8.1",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "f8edfccba429b6477927a7c1ce1bc6729521305e",
"build_date" : "2023-06-05T21:32:25.188464208Z",
"build_snapshot" : false,
"lucene_version" : "9.6.0",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
重置密码
# 进入容器
docker exec -it es_database bash
# 执行配置用户密码的命令【二选一】
./bin/elasticsearch-setup-passwords auto #自动生成随机密码
./bin/elasticsearch-setup-passwords interactive #手动设置用户密码
访问http://127.0.0.1:9200,用户名elastic,密码就是你设置的那个
三、部署kibana容器
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://ip:9200 \
-p 5601:5601 \
kibana:7.6.2
命令解释 –name kibana:容器名称为kibana -e ELASTICSEARCH_HOSTS=http://escontainer:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch –network es-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中 -p 5601:5601:端口映射配置 kibana:7.6.2:镜像名称
在浏览器输入“http://ip地址:5601”,如果显示以下内容则部署成功。
四、IK分词插件
点击这里下载对应版本的ik看分词器
docker cp elasticsearch-analysis-ik-8.8.1.zip es_database:/elasticsearch-analysis-ik-8.8.1.zip #复制下载的ik分词器到docker容器内
docker exec -it es_database bash #进入docker容器
elasticsearch-plugin install file:////elasticsearch-analysis-ik-8.8.1.zip # 安装ik分词器
(一定要加上file://前缀)
重启es容器
docker restart es_database
测试分词效果
IK分词器有两种分词模式:ik_max_word和ik_smart模式。
分词如下:
curl -X GET "localhost:9200/_analyze" -H 'Content-Type: application/json' -d'
{
"analyzer" : "ik_max_word",
"text" : "大学生活好!"
}
'
curl -X GET "localhost:9200/{index}/_analyze" -H 'Content-Type: application/json' -d'
{
"analyzer" : "ik_smart",
"text" : "大学生活好!"
}
'
上面指定了一个analyzer,其中的index是可选的,如果选了index,就可以使用对应index具体字段的分词器。也指定了要分词的content(text),除去text外,其余参数都为选填:
- text:待分词的语句,必填;
- analyzer:指定使用的分析器,优先级高于tokenizer,如果没有任何除去text的额外参数,则有一个隐性的analyzer:standard;
- char_filter:像定义分析器那样指定charfilter;
- filter:指定token filter;
- field:在指定了index的前提下,可以指定一个字段使用该字段的分词器;
- tokenizer:指定分词器;
- normalizer:指定规范器,与tokenizer和analyzer相悖。