[v8.6] 使用docker-compose安装Elasticsearch/Kibana的步骤(供试用使用)
首先
本文介绍了在Windows/Linux操作系统上安装Elasticsearch的过程。
-
- Windows
- Linux
我想展示使用Docker Compose的步骤。我正在使用最新版本8.6.2进行操作。
使用docker-compose的好处有几个。
-
- 自分のPCや仮想マシンの環境を汚さずに済む
-
- 設定ファイルを作ってしまえば、コマンド一発で立ち上がる
-
- KibanaとElasticsearch間のセキュア通信の設定が自動で行われる
- 環境依存がない(docker-composeさえ動けば良い)
在实验环境下尝试了这个步骤。
-
- クラウド:GCP
-
- OS: Debian GNU/Linux 11 (bullseye)
-
- スペック: e2.mediumインスタンス (2 vCPU, 4GB mem)
-
- Docker version 20.10.23, build 7155243
- Docker Compose version v2.16.0
由于初始状态下没有安装docker/docker-compose,让我们开始安装。
准备好
vm.max_map_count的含义
很可能原样运行时,Elasticsearch无法启动。
请执行以下命令:
sudo sysctl -w vm.max_map_count=262144
https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html
防火墙规则

文件
基本上,以下链接中的内容是可以使用的,但是如果直接使用这个docker-compose文件,将会形成一个三节点的结构。
https://www.elastic.co/guide/en/elasticsearch/reference/8.6/docker.html#docker-compose-file
稍微编辑一下文件,可以在一个节点上启动。
设置文件
创建一个合适的目录并将以下两个文件放置在创建的目录中。
.
├── .env
├── docker-compose.yml
docker-compose.yml (Chinese: docker-compose.yml)
我会直接复制并使用下述内容。
version: "2.2"
services:
setup:
image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
container_name: setup
volumes:
- certs:/usr/share/elasticsearch/config/certs
user: "0"
command: >
bash -c '
if [ x${ELASTIC_PASSWORD} == x ]; then
echo "Set the ELASTIC_PASSWORD environment variable in the .env file";
exit 1;
elif [ x${KIBANA_PASSWORD} == x ]; then
echo "Set the KIBANA_PASSWORD environment variable in the .env file";
exit 1;
fi;
if [ ! -f config/certs/ca.zip ]; then
echo "Creating CA";
bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip;
unzip config/certs/ca.zip -d config/certs;
fi;
if [ ! -f config/certs/certs.zip ]; then
echo "Creating certs";
echo -ne \
"instances:\n"\
" - name: es01\n"\
" dns:\n"\
" - es01\n"\
" - localhost\n"\
" ip:\n"\
" - 127.0.0.1\n"\
> config/certs/instances.yml;
bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certs/instances.yml --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key;
unzip config/certs/certs.zip -d config/certs;
fi;
echo "Setting file permissions"
chown -R root:root config/certs;
find . -type d -exec chmod 750 \{\} \;;
find . -type f -exec chmod 640 \{\} \;;
echo "Waiting for Elasticsearch availability";
until curl -s --cacert config/certs/ca/ca.crt https://es01:9200 | grep -q "missing authentication credentials"; do sleep 30; done;
echo "Setting kibana_system password";
until curl -s -X POST --cacert config/certs/ca/ca.crt -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" https://es01:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done;
echo "All done!";
'
healthcheck:
test: ["CMD-SHELL", "[ -f config/certs/es01/es01.crt ]"]
interval: 1s
timeout: 5s
retries: 120
mem_limit: ${MEM_LIMIT}
es01:
depends_on:
setup:
condition: service_healthy
image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
container_name: es01
volumes:
- certs:/usr/share/elasticsearch/config/certs
- esdata01:/usr/share/elasticsearch/data
- ./:/etc/elasticsearch
ports:
- ${ES_PORT}:9200
environment:
- node.name=es01
- cluster.name=${CLUSTER_NAME}
- cluster.initial_master_nodes=es01
- discovery.seed_hosts=es01
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- bootstrap.memory_lock=true
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=true
- xpack.security.http.ssl.key=certs/es01/es01.key
- xpack.security.http.ssl.certificate=certs/es01/es01.crt
- xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
- xpack.security.http.ssl.verification_mode=certificate
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.key=certs/es01/es01.key
- xpack.security.transport.ssl.certificate=certs/es01/es01.crt
- xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.license.self_generated.type=${LICENSE}
mem_limit: ${MEM_LIMIT}
ulimits:
memlock:
soft: -1
hard: -1
healthcheck:
test:
[
"CMD-SHELL",
"curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'",
]
interval: 10s
timeout: 10s
retries: 120
kibana:
depends_on:
es01:
condition: service_healthy
image: docker.elastic.co/kibana/kibana:${STACK_VERSION}
container_name: kibana
volumes:
- certs:/usr/share/kibana/config/certs
- kibanadata:/usr/share/kibana/data
ports:
- ${KIBANA_PORT}:5601
environment:
- SERVERNAME=kibana
- ELASTICSEARCH_HOSTS=https://es01:9200
- ELASTICSEARCH_USERNAME=kibana_system
- ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}
- ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=config/certs/ca/ca.crt
mem_limit: ${MEM_LIMIT}
healthcheck:
test:
[
"CMD-SHELL",
"curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'",
]
interval: 10s
timeout: 10s
retries: 120
volumes:
certs:
driver: local
esdata01:
driver: local
kibanadata:
driver: local
.env文件
请根据需要更改,这是在docker-compose.yml文件中使用的变量。
如果MEM_LIMIT太小,将无法启动。
STACK_VERSION = 8.6.2
ELASTIC_PASSWORD = elastic
KIBANA_PASSWORD = elastic
ES_PORT = 9200
CLUSTER_NAME = test_cluster
LICENSE = trial
MEM_LIMIT = 1073741824
KIBANA_PORT = 5601
开机
在创建的目录中运行docker-compose up -d。
获取映像可能需要一些时间。
容器映像的大小大致如下。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.elastic.co/kibana/kibana 8.6.2 65e53ffb7df5 3 weeks ago 727MB
docker.elastic.co/elasticsearch/elasticsearch 8.6.2 04485c81cc2d 3 weeks ago 1.29GB
打开 Kibana 并登录
执行 docker-compose logs -f 命令,当出现以下部分时,即可登录到 Kibana。
kibana | [2023-03-10T05:13:52.067+00:00][INFO ][status] Kibana is now available (was degraded)
如果要使用自己的PC或带有GUI的虚拟机从该机器上使用,则使用http://localhost:5601。如果是在不同的位置,则使用http://<IP地址>:5601。
错误 (wù)
有时会以以下的方式失败。
takeo_furukubo_elastic_co@takeo-docker-vm:~/elastic/singlenode$ docker-compose up -d
[+] Running 3/4
⠿ Network singlenode_default Created 0.1s
⠿ Container setup Healthy 2.5s
⠿ Container es01 Error 41.9s
⠿ Container kibana Created
在这种情况下,如果先运行docker-compose down然后再运行docker-compose up -d,就会启动。
内存不足
如果再次运行docker-compose up -d时容器没有启动,可能是内存不足。
当内存不足时,docker-compose的输出与上述情况相同。
由于失败发生得非常快,很容易区别出来。
运行docker logs es01,并且显示ERROR: Elasticsearch exited unexpectedly。
可以增加主机的内存或增加MEM_LIMIT。
停下来
在存放docker-compose.yml文件的位置执行docker-compose down
删除
如果您想要删除所有容器镜像、卷等,请在停止后运行docker system prune -a命令。
请注意,这会删除除Elasticsearch以外的所有内容。
最终
完成这个步骤后,您将能够在Kibana中进行数据分析。我们将在未来按以下内容进行记录。
-
- Elastic Agentが使えるようにdocker-composeでFleetを立ち上げる
-
- Elasticsearchを複数立ち上げる
- Master Dedicatedを立ち上げる
弹性云免费试用
请务必试用我们的Elastic Cloud免费试用14天。
请参考下方链接以查看详细步骤。
关于 Elastic Cloud – 试试部署一个实例。