在群中保持docker卷

时间:2019-04-26 20:59:01

标签: docker docker-compose docker-swarm

因此,我正在建立大量Elasticsearch节点,理想情况下,我希望看到两件事发生。

  1. 使每个节点将其所有数据保存在主机上的文件夹中。
  2. 即使将堆栈毁坏了,也要初始化一个新容器,它也应该能够使用相同的体积在之前的一个容器中被杀死。

我正在做什么:

  

docker volume create --opt类型=无--opt设备= / mnt / data --opt   o = bind --name = elastic-data

docker-compose.yml

version: '3'
services:
  elastic-node1:
    image: amazon/opendistro-for-elasticsearch:0.8.0
    environment:
      - cluster.name=elastic-cluster
      - bootstrap.memory_lock=false
      - "ES_JAVA_OPTS=-Xms32g -Xmx32g"
      - opendistro_security.ssl.http.enabled=false
      - discovery.zen.minimum_master_nodes=1
    volumes:
      - elastic-data:/mnt/data
    ports:
      - 9200:9200
      - 9600:9600
      - 2212:2212  
    ulimits:
      memlock:
        soft: -1
        hard: -1
    networks:
      - elastic-net
    deploy:
      mode: replicated
      replicas: 1

volumes:
  elastic-data:
    external: true

然后我将启动堆栈,发布一些数据,移除堆栈并再次凝视它,但是数据并未保留。

  

docker stack deploy --compose-file docker-compose.yml opendistrostack

我对卷有些困惑,无法找到包含每个用例详细说明的好的文档。 你能指出我正确的方向吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

因为它是docker swarm仅支持本地卷驱动程序。每当在新主机上创建容器时,您将始终拥有最新数据。

常用技术是使用共享卷/ fs。我建议实现GlusterFS,它是分布式的并且具有高度可扩展的fs,非常容易上手,并且为大量用例提供了详尽的文档。

此外,您可以在docker store中签出一些第三方音量驱动程序。