【问题标题】:Persist docker volume on swarm在 swarm 上保持 docker 卷
【发布时间】:2019-09-16 09:30:50
【问题描述】:

所以我正在构建一组 Elasticsearch 节点,理想情况下我希望看到两件事发生。

  1. 让每个节点将其所有数据保存在主机上的一个文件夹中。
  2. 即使堆栈已被销毁,新容器也已初始化,它应该能够使用相同的卷拾取前一个容器被杀死的位置。

这就是我正在做的事情:

docker volume create --opt type=none --opt device=/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

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

谢谢。

【问题讨论】:

标签: docker docker-compose docker-swarm


【解决方案1】:

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

常用技术是使用共享卷/fs。我建议实现 GlusterFS,它是分布式的和高度可扩展的 fs,非常容易上手,并且对于 swarm 用例有很好的文档记录。

此外,您可以在 docker store 中查看一些 3rd 方卷驱动程序。

【讨论】:

  • 我刚刚找到this 帖子,其中详细解释了我上面所说的内容。
  • 太棒了!非常感谢您提供的所有信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多