創建自定義網絡
創建一個名為 es-net 的橋接網絡。這將作為 Elasticsearch 和 Kibana 的私有通信通道。
# 創建網絡
docker network create es-net
# 查看網絡是否創建成功
docker network ls
啟動 Elasticsearch 容器
安裝命令
docker run -d \--name elasticsearch \--network es-net \-p 9200:9200 \-p 9300:9300 \-e "discovery.type=single-node" \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \-v es_data:/usr/share/elasticsearch/data \docker.elastic.co/elasticsearch/elasticsearch:8.11.0
參數解釋
- -d:在后臺運行容器(守護進程模式)。
- –name elasticsearch:為容器指定一個名稱,后續 Kibana 將通過這個名稱 elasticsearch 來訪問它。
- –network es-net:將容器連接到剛創建的自定義網絡。
- -p 9200:9200:將容器的 9200 端口(HTTP API 端口)映射到宿主機的 9200 端口,以便從宿主機訪問。
- -p 9300:9300:將容器的 9300 端口(節點間通信端口)映射出來,通常其他 Elasticsearch 節點會通過這個端口通信,單節點模式下非必須,但建議保留。
- -e “discovery.type=single-node”:設置 Elasticsearch 為單節點模式,簡化配置。
- -e “ES_JAVA_OPTS=-Xms512m -Xmx512m”:為 Elasticsearch 分配 512MB 的堆內存。
- -v es_data:/usr/share/elasticsearch/data:將數據目錄掛載到名為 es_data 的 Docker 卷中,防止容器刪除后數據丟失。
- docker.elastic.co/…:8.11.0:指定使用的鏡像和版本。
安裝驗證
通過網頁訪問9200端口,提示要輸入用戶和密碼。
但是在安裝時沒有為ES設置用戶名和密碼,查找資料發現ES會有個默認超級用戶elastic,但是需要我們手動為這個用戶設置密碼。
ES設置密碼
- 進入容器
使用 docker exec 命令以交互模式(-it)進入正在運行的容器。
docker exec -it elasticsearch /bin/bash
- 在容器內執行密碼設置命令
Elasticsearch 提供了內置的 elasticsearch-setup-passwords 工具來批量設置所有內置用戶的密碼。
重要提示: 此命令會為所有內置用戶(如 elastic, kibana_system, apm_system 等)設置新密碼。如果你不是首次設置,它將重置所有密碼(ps:elastic)。
# 使用 interactive (交互) 模式
elasticsearch-setup-passwords interactive
再次安裝驗證
輸入用戶及密碼后,驗證成功
啟動Kibana容器
啟動命令
docker run -d \--name kibana \--network es-net \-p 5601:5601 \-v /usr/share/elasticsearch/config/certs/http_ca.crt:/usr/share/elasticsearch/config/certs/http_ca.crt:ro \-e "ELASTICSEARCH_HOSTS=https://elasticsearch:9200" \-e "ELASTICSEARCH_USERNAME=kibana_system" \-e "ELASTICSEARCH_PASSWORD=***" \-e "ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=/usr/share/elasticsearch/config/certs/http_ca.crt" \-e "ELASTICSEARCH_SSL_VERIFICATIONMODE=certificate" \docker.elastic.co/kibana/kibana:8.11.0
參數解釋
- –name kibana:為容器指定名稱。
- –network es-net:讓 Kibana 容器加入到與 Elasticsearch 同一個自定義網絡中。
- -p 5601:5601:將容器的 5601 端口映射到宿主機的 5601 端口。
- -v /usr/share/elasticsearch/config/certs/http_ca.crt:/usr/share/elasticsearch/config/certs/http_ca.crt:ro:將ES生成的認證證書掛載到容器內,kibana容器啟動時會訪問
- -e “ELASTICSEARCH_HOSTS=http://elasticsearch:9200”:關鍵! 這里設置了 Elasticsearch 的 URL。注意,主機名用的就是 Elasticsearch 容器的名稱 elasticsearch。這是因為在自定義網絡 elastic-net 中,Docker 內置的 DNS 服務會自動將容器名稱解析為其內部 IP 地址。
- -e “ELASTICSEARCH_USERNAME=kibana_system”:8.x版本的es默認開啟了安全認證,使用kibana_system用戶連接
- -e “ELASTICSEARCH_PASSWORD=***”:8.x版本的es需要連接密碼,在此使用kibana_system用戶訪問es的密碼。
- -e “ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=/usr/share/elasticsearch/config/certs/http_ca.crt”: 告訴 Kibana CA 證書的路徑
- -e “ELASTICSEARCH_SSL_VERIFICATIONMODE=certificate”:啟動時驗證證書
- docker.elastic.co/…:8.11.0:Kibana 的版本必須與 Elasticsearch 的版本一致。
安裝驗證
訪問ES端口,因為開啟了安全認證,輸入ES超級用戶elastic的用戶名及密碼即可登錄。
安裝IK分詞器
下載IK分詞器
ik分詞器下載地址
下載版本和ES版本保持一致:8.11.0
安裝
- 直接通過數據卷共享將zip文件同步到容器中的掛載點目錄下
- 安裝
bin/elasticsearch-plugin install file:///usr/share/elasticsearch/data/elasticsearch-analysis-ik-8.11.0.zip