這是一篇本地 docker 部署筆記,基本上是參考以下文章。記錄一些實際操作中遇到的問題。
ElasticSearch最新版快速入門詳解_靜待花開-CSDN博客_elasticsearch入門
ElasticSearch中文分詞,看這一篇就夠了_靜待花開-CSDN博客_elasticsearch 中文分詞
最清晰易懂的Elasticsearch操作手冊|收藏夾必備_靜待花開-CSDN博客_elasticsearch 操作手冊
elasticsearch使用ik中文分詞器 - SegmentFault 思否
1 鏡像准備
docker search elasticsearch
搜索 elasticsearch 可以看到如下鏡像,
這里使用第二個,集成了 es 和 kibana 。
nshou/elasticsearch-kibana - Docker Image | Docker Hub
拉取鏡像
docker pull nshou/elasticsearch-kibana
創建並運行容器
docker run -d -p 9200:9200 -p 9300:9300 -p 5601:5601 --name eskibana nshou/elasticsearch-kibana
進入容器(這里的 ddade0ae3 是上一句返回的容器 ID)
docker exec -it ddade0ae3 bash
2 將數據/配置目錄掛載
如果不使用掛載,容器被刪除之后,數據就沒有了。實際使用中,通常將持久化數據掛載出來。
需要掛載的文件/目錄:配置文件,數據目錄,插件目錄。
可以先將容器中默認的配置文件拷貝出來,免得自己新建一個。
這里 018d550c168c 是容器 ID,命令在宿主機執行,執行目錄是自己選定的一個准備用來掛載的目錄。
我這里的目錄是:/Users/myname/Documents/docker/es/vol/eskibana
docker cp 018d550c168c:/home/elasticsearch/kibana-7.16.2-linux-x86_64/config/kibana.yml ./kibana-bak/
docker cp 018d550c168c:/home/elasticsearch/elasticsearch-7.16.2/config/elasticsearch.yml ./es-bak/
將文件拷貝出來之后,准備掛載的目錄。
最終目錄是這個樣子,bak 目錄是做備份用的。
賦讀寫權限
chmod -R 777 ./es
chmod -R 777 ./kibana
將之前運行起來的容器關閉(否則端口會占用),使用掛載運行新的容器
docker run --name esk \
-p 9200:9200 -p 9300:9300 -p 5601:5601 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /Users/xxx/Documents/docker/es/vol/eskibana/es/config/elasticsearch.yml:/home/elasticsearch/elasticsearch-7.16.2/config/elasticsearch.yml \
-v /Users/xxx/Documents/docker/es/vol/eskibana/es/data:/home/elasticsearch/elasticsearch-7.16.2/data \
-v /Users/xxx/Documents/docker/es/vol/eskibana/es/plugins:/home/elasticsearch/elasticsearch-7.16.2/plugins \
-v /Users/xxx/Documents/docker/es/vol/eskibana/kibana/config/kibana.yml:/home/elasticsearch/kibana-7.16.2-linux-x86_64/config/kibana.yml \
-v /Users/xxx/Documents/docker/es/vol/eskibana/kibana/data:/home/elasticsearch/kibana-7.16.2-linux-x86_64/data \
-v /Users/xxx/Documents/docker/es/vol/eskibana/kibana/plugins:/home/elasticsearch/kibana-7.16.2-linux-x86_64/plugins \
-d nshou/elasticsearch-kibana
參考:
Docker部署Elasticsearch
docker安裝ElasticSearch
如果運行時發現如下錯誤,
Error response from daemon: Mounts denied:
The path /es/data is not shared from the host and is not known to Docker.
You can configure shared paths from Docker -> Preferences... -> Resources -> File Sharing.
See https://docs.docker.com/desktop/mac for more info.
1 根據提示檢查 docker 配置,2 使用絕對路徑
參考:關於 is not shared from OS X and is not known to Docker._程序和我有一個能跑就行了-CSDN博客
3 安裝中文分詞插件
我這里使用的是使用先手動下載,再使用命令安裝的方式。
3.1 從 github 下載插件 zip 包
https://github.com/medcl/elasticsearch-analysis-ik/releases
3.2 將 zip 包拷貝到容器中
docker cp ./ik.zip f8ad1fb16b0:/home/elasticsearch/mytmp
3.3 在容器中安裝插件
這句需要在 es 目錄中的 bin 目錄下運行,elasticsearch-plugin 並不是一個全局指令
./elasticsearch-plugin install file:///home/elasticsearch/mytmp/ik.zip
安裝完成插件之后,需要重啟容器
重啟時,如果出現如下錯誤,
Exception in thread "main" java.nio.file.NotDirectoryException: /home/elasticsearch/elasticsearch-7.16.2/plugins/.DS_Store
則需要刪除 plugins 目錄中的 .DS_Store 文件
ls -a
rm .DS_Store
然后重啟容器
測試中文分詞
POST /_analyze
{
"analyzer": "ik_max_word",
"text": "且聽風吟"
}
結果:
{
"tokens" : [
{
"token" : "且聽",
"start_offset" : 0,
"end_offset" : 2,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "風吟",
"start_offset" : 2,
"end_offset" : 4,
"type" : "CN_WORD",
"position" : 1
}
]
}
4 測試 ES 與 kibana
訪問 http://127.0.0.1:5601/ 以訪問 kibana,在 dev tools 中做測試。
使用 elasticsearch-head Chrome 插件查看數據。
5 測試掛載效果
將上面啟動的容器關閉,使用上面的命令,啟動一個新的容器
docker run --name esk2 \
-p 9200:9200 -p 9300:9300 -p 5601:5601 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /Users/xxx/Documents/docker/es/vol/eskibana/es/config/elasticsearch.yml:/home/elasticsearch/elasticsearch-7.16.2/config/elasticsearch.yml \
-v /Users/xxx/Documents/docker/es/vol/eskibana/es/data:/home/elasticsearch/elasticsearch-7.16.2/data \
-v /Users/xxx/Documents/docker/es/vol/eskibana/es/plugins:/home/elasticsearch/elasticsearch-7.16.2/plugins \
-v /Users/xxx/Documents/docker/es/vol/eskibana/kibana/config/kibana.yml:/home/elasticsearch/kibana-7.16.2-linux-x86_64/config/kibana.yml \
-v /Users/xxx/Documents/docker/es/vol/eskibana/kibana/data:/home/elasticsearch/kibana-7.16.2-linux-x86_64/data \
-v /Users/xxx/Documents/docker/es/vol/eskibana/kibana/plugins:/home/elasticsearch/kibana-7.16.2-linux-x86_64/plugins \
-d nshou/elasticsearch-kibana
如果前一個容器沒有刪除,這里的 --name 需要取個新名字。
如果一切正常,等待重啟完成之后,之前的數據,kibana 中配的看板等,應該都還存在。