运行 使用 'docker-compose' 命令的 Elasticsearch、Logstash 和 Kibana
Run Elasticsearch, Logstash and Kibana with 'docker-compose' command
我将使用 docker-compose
命令和以下 docker-compose.yml
文件进入 运行 ELK:
---
version: '2'
services:
kibana:
image: docker.elastic.co/kibana/kibana
links:
- elasticsearch
ports:
- 5601:5601
kibana:
image: docker.elastic.co/logstash/logstash
links:
- elasticsearch
ports:
- 5044:5044
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch
cap_add:
- IPC_LOCK
volumes:
- esdata1:/usr/share/elasticsearch/data
ports:
- 9200:9200
volumes:
esdata1:
driver: local
但我有几个问题:
1) 我为 link 容器指定了 links
参数,但我还应该指定 networks
参数吗?它有什么用?
2) 如何更改 Elasticsearch、Logstash 和 Kibana 的默认用户名和密码?
3) Elasticsearch 配置参数存储在 elasticsearch.yml
文件中,但我在哪里可以找到该文件?
是否可以直接在docker-compose.yml
文件中定义path.data
、path.logs
、cluster.name
、node.name
等Elasticsearch参数?
1)
links 参数允许通过其服务名称或别名访问链接的容器。这对于两个服务都加入的任何 docker 网络都是可能的。
如果您没有在服务的 networks 键下指定任何网络,服务将加入 docker 默认网络(我认为是网桥)。
如果您希望您的服务加入(多个)特定的 docker 网络,则只需指定网络名称。然后,您可以再次在顶级 networks 键下定义(让 docker-compose 创建网络)或在 docker 之外准备每个 docker network create
2) 您使用的图像是使用 X-Pack 构建的,此处描述了如何更改密码X-Pack security 文档中的示例:
curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/elastic/_password' -H "Content-Type: application/json" -d '{
"password" : "elasticpassword"
}'
curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/kibana/_password' -H "Content-Type: application/json" -d '{
"password" : "kibanapassword"
}'
curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/logstash_system/_password' -H "Content-Type: application/json" -d '{
"password" : "logstashpassword"
}'
如果您不想将其作为手动 post 设置步骤执行,则必须创建您自己的派生 docker 图像。
3) 您将使用 elasticsearch.yml 配置的配置参数可以使用环境变量进行设置,如Elastic search docker documentation。示例取自文档:
...
services:
elasticsearch1:
image: docker.elastic.co/elasticsearch/elasticsearch:5.3.0
container_name: elasticsearch1
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
...
我将使用 docker-compose
命令和以下 docker-compose.yml
文件进入 运行 ELK:
---
version: '2'
services:
kibana:
image: docker.elastic.co/kibana/kibana
links:
- elasticsearch
ports:
- 5601:5601
kibana:
image: docker.elastic.co/logstash/logstash
links:
- elasticsearch
ports:
- 5044:5044
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch
cap_add:
- IPC_LOCK
volumes:
- esdata1:/usr/share/elasticsearch/data
ports:
- 9200:9200
volumes:
esdata1:
driver: local
但我有几个问题:
1) 我为 link 容器指定了 links
参数,但我还应该指定 networks
参数吗?它有什么用?
2) 如何更改 Elasticsearch、Logstash 和 Kibana 的默认用户名和密码?
3) Elasticsearch 配置参数存储在 elasticsearch.yml
文件中,但我在哪里可以找到该文件?
是否可以直接在docker-compose.yml
文件中定义path.data
、path.logs
、cluster.name
、node.name
等Elasticsearch参数?
1) links 参数允许通过其服务名称或别名访问链接的容器。这对于两个服务都加入的任何 docker 网络都是可能的。
如果您没有在服务的 networks 键下指定任何网络,服务将加入 docker 默认网络(我认为是网桥)。
如果您希望您的服务加入(多个)特定的 docker 网络,则只需指定网络名称。然后,您可以再次在顶级 networks 键下定义(让 docker-compose 创建网络)或在 docker 之外准备每个 docker network create
2) 您使用的图像是使用 X-Pack 构建的,此处描述了如何更改密码X-Pack security 文档中的示例:
curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/elastic/_password' -H "Content-Type: application/json" -d '{
"password" : "elasticpassword"
}'
curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/kibana/_password' -H "Content-Type: application/json" -d '{
"password" : "kibanapassword"
}'
curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/logstash_system/_password' -H "Content-Type: application/json" -d '{
"password" : "logstashpassword"
}'
如果您不想将其作为手动 post 设置步骤执行,则必须创建您自己的派生 docker 图像。
3) 您将使用 elasticsearch.yml 配置的配置参数可以使用环境变量进行设置,如Elastic search docker documentation。示例取自文档:
...
services:
elasticsearch1:
image: docker.elastic.co/elasticsearch/elasticsearch:5.3.0
container_name: elasticsearch1
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
...