0.前言
自己目前在学习探索Docker技术,这里简单实践一下创建带有ik分词器的Elasticsearch容器,涉及Dockerfile和docker-compose的使用。
1.创建容器
1.1 编写Dockerfile
新建elasticsearch
目录并在其内创建Dockerfile文件
mkdir elasticsearch && elasticsearch
touch Dockerfile
Dockerfile
中内容如下:
FROM elasticsearch:7.7.1
RUN yes | ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.7.1/elasticsearch-analysis-ik-7.7.1.zip
1.2 编写docker-compose.yml
在elasticsearch
文件夹同级目录下创建docker-compose.yml
文件,内容为:
version: '3'
services:
es-ik:
build: ./elasticsearch
image: elasticsearch-ik:7.7.1
container_name: es_ik
environment:
- discovery.type=single-node
ports:
- 9201:9200
- 9301:9300
上面的端口映射到Host主机的9201和9301是因为系统上已经有Elasticsearch在运行了并且使用了默认的端口,这里需要再换一下端口。
1.3 打包镜像
上面的目录结构如下:
.
├── docker-compose.yml
└── elasticsearch
├── Dockerfile
├── elasticsearch-analysis-ik-7.7.1.zip
└── test.es
执行如下命令以构建镜像:
docker-compose build
执行docker images
可以看到镜像已经成功创建:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
elasticsearch-ik 7.7.1 1812e4f405c5 3 hours ago 814 MB
2.测试容器
2.1 启动容器
执行如下命令以启动容器:
docker-compose up
2.2 查看容器启动状态
[root@localhost Docker]# ls
docker-compose.yml elasticsearch
[root@localhost Docker]# docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------------
es_ik /tini -- /usr/local/bin/do ... Up 0.0.0.0:9201->9200/tcp, 0.0.0.0:9301->9300/tcp
2.3 测试elasticsearch服务
这里我是用的是VSCode的Elasticsearch for VSCode
插件,该插件允许我们编写.es
文件向es执行查询请求。
如test.es
内容如下:
POST _analyze
{
"analyzer": "ik_smart",
"text": "中华人民共和国"
}
POST _analyze
{
"analyzer": "ik_max_word",
"text": "中华人民共和国"
}
如图:
请求结果如下:
{
"tokens": [
{
"token": "中华人民共和国",
"start_offset": 0,
"end_offset": 7,
"type": "CN_WORD",
"position": 0
},
{
"token": "中华人民",
"start_offset": 0,
"end_offset": 4,
"type": "CN_WORD",
"position": 1
},
{
"token": "中华",
"start_offset": 0,
"end_offset": 2,
"type": "CN_WORD",
"position": 2
},
{
"token": "华人",
"start_offset": 1,
"end_offset": 3,
"type": "CN_WORD",
"position": 3
},
{
"token": "人民共和国",
"start_offset": 2,
"end_offset": 7,
"type": "CN_WORD",
"position": 4
},
{
"token": "人民",
"start_offset": 2,
"end_offset": 4,
"type": "CN_WORD",
"position": 5
},
{
"token": "共和国",
"start_offset": 4,
"end_offset": 7,
"type": "CN_WORD",
"position": 6
},
{
"token": "共和",
"start_offset": 4,
"end_offset": 6,
"type": "CN_WORD",
"position": 7
},
{
"token": "国",
"start_offset": 6,
"end_offset": 7,
"type": "CN_CHAR",
"position": 8
}
]
}