docker-elk - 它是如何持久化 elasticsearch 索引的?
docker-elk - how is it persisting elasticsearch index?
我刚刚开始掌握 Docker 和 docker-compose,试图为 Elasticsearch 创建一个开发环境,我稍后会部署它。
我一直在使用 docker-elk 作为参考,我已经成功地创建了一个有效的 Elasticsearch 容器,为它播种,并在我的项目中使用它。
据我了解,Docker 容器不会持久保存数据,除非您使用卷 API 并在容器外部创建一个容器随后访问的卷(阅读 here).
但是 docker-elk 仅使用 Volumes 来共享一个配置 yml 文件,但不知何故,当我将容器上下移动时,我的弹性指数仍然存在。
来自 docker-elk 自述文件:
The data stored in Elasticsearch
will be persisted after container reboot but not after container
removal.
有人可以解释以下配置的哪一部分允许 docker 容器保留索引吗?
docker-compose.yml
version: '2'
services:
elasticsearch:
build:
context: build/elasticsearch/
volumes:
- ./build/elasticsearch/config.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elk
networks:
elk:
driver: bridge
build/elasticsearch/Dockerfile
FROM docker.elastic.co/elasticsearch/elasticsearch-oss:6.0.0
build/elasticsearch/config.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1
discovery.type: single-node
您可能知道,容器就是一个沙箱。它有一个文件系统,其结构与典型的 linux OS 非常相似。容器只能看到该文件系统中的那些文件和文件夹。
容器内的进程运行将其数据和配置写入此文件系统中的文件。此进程不知道它在容器或 VM 中 运行。因此,数据保存在该文件系统的文件和文件夹中。
现在,当您使用 docker rm ...
删除 容器时,这些文件会随容器一起删除,因此您会丢失数据,除非您使用将这些数据备份到主机.
另一方面,停止和启动容器不会删除容器文件,因此当您重新启动容器时数据仍然存在。
可以使用以下命令在 UUID 中观察索引及其映射。
curl 'localhost:9200/_cat/indices?v'
作为已接受答案的补充,适用于正在寻找如何持久保存数据的任何人。添加问题中提到的volume
。
version: '3'
services:
elasticsearch: # Elasticsearch Instance
container_name: es-search
image: docker.elastic.co/elasticsearch/elasticsearch:6.1.1
volumes: # Persist ES data in seperate "esdata" volume
- esdata:/usr/share/elasticsearch/data
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.type=single-node
ports: # Expose Elasticsearch ports
- "9300:9300"
- "9200:9200"
volumes: # Define seperate volume for Elasticsearch data
esdata: ./my/esdata # path of your persisted data here
我在这里找到了弹性 docker 的指南:https://blog.patricktriest.com/text-search-docker-elasticsearch/
我刚刚开始掌握 Docker 和 docker-compose,试图为 Elasticsearch 创建一个开发环境,我稍后会部署它。
我一直在使用 docker-elk 作为参考,我已经成功地创建了一个有效的 Elasticsearch 容器,为它播种,并在我的项目中使用它。
据我了解,Docker 容器不会持久保存数据,除非您使用卷 API 并在容器外部创建一个容器随后访问的卷(阅读 here).
但是 docker-elk 仅使用 Volumes 来共享一个配置 yml 文件,但不知何故,当我将容器上下移动时,我的弹性指数仍然存在。
来自 docker-elk 自述文件:
The data stored in Elasticsearch will be persisted after container reboot but not after container removal.
有人可以解释以下配置的哪一部分允许 docker 容器保留索引吗?
docker-compose.yml
version: '2'
services:
elasticsearch:
build:
context: build/elasticsearch/
volumes:
- ./build/elasticsearch/config.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elk
networks:
elk:
driver: bridge
build/elasticsearch/Dockerfile
FROM docker.elastic.co/elasticsearch/elasticsearch-oss:6.0.0
build/elasticsearch/config.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1
discovery.type: single-node
您可能知道,容器就是一个沙箱。它有一个文件系统,其结构与典型的 linux OS 非常相似。容器只能看到该文件系统中的那些文件和文件夹。
容器内的进程运行将其数据和配置写入此文件系统中的文件。此进程不知道它在容器或 VM 中 运行。因此,数据保存在该文件系统的文件和文件夹中。
现在,当您使用 docker rm ...
删除 容器时,这些文件会随容器一起删除,因此您会丢失数据,除非您使用将这些数据备份到主机.
另一方面,停止和启动容器不会删除容器文件,因此当您重新启动容器时数据仍然存在。
可以使用以下命令在 UUID 中观察索引及其映射。
curl 'localhost:9200/_cat/indices?v'
作为已接受答案的补充,适用于正在寻找如何持久保存数据的任何人。添加问题中提到的volume
。
version: '3'
services:
elasticsearch: # Elasticsearch Instance
container_name: es-search
image: docker.elastic.co/elasticsearch/elasticsearch:6.1.1
volumes: # Persist ES data in seperate "esdata" volume
- esdata:/usr/share/elasticsearch/data
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.type=single-node
ports: # Expose Elasticsearch ports
- "9300:9300"
- "9200:9200"
volumes: # Define seperate volume for Elasticsearch data
esdata: ./my/esdata # path of your persisted data here
我在这里找到了弹性 docker 的指南:https://blog.patricktriest.com/text-search-docker-elasticsearch/