在Rancher中使用不同但持久的卷扩展Docker容器

时间:2016-04-02 23:28:43

标签: docker docker-compose rancher

我目前正试图在使用Rancher扩展容器(或者Docker Compose,因为这更像是一个抽象的问题)时弥补持久但独特的卷之间的差距。

以Minecraft服务器为例,我在Rancher / Compose中定义了一个服务,它使用命名卷作为其数据/世界目录(例如-v minecraft_data:/ data,其中Minecraft图像从此处加载其世界文件/数据目录)。我之所以使用这样一个命名卷,是因为我希望它在服务升级之间保持不变(例如我改变图像版本,或者想要改变一些环境变量),这是不可能的。匿名卷。

现在,在尝试扩展我的服务时,我要么让多个容器访问相同的数据(对许多用例不利),要么在使用匿名卷时失去服务可升级性。

是否有任何可能有助于解决此问题的工具,最佳做法或模式?

2 个答案:

答案 0 :(得分:2)

在当前版本的牧场主(此时为v1.4)中,可以在环境基础架构级别插入storage drivers。这允许您创建在环境,堆栈或容器范围内的卷。

对于您的用例,听起来每个容器范围就是您所需要的。使用rancher-compose执行以下操作:

version: '2'
services:
  foo:
    image: busybox
    volumes:
    - bar:/var/lib/storage
    command: /bin/sh -c 'while true; do sleep 500; done'
volumes:
  bar:
    per_container: true

然后,rancher-compose up -d将使用一个容器和一个唯一卷创建堆栈和服务。 rancher scale foo=2将创建具有自己的卷等的另一个容器。您还可以为每个卷指定卷存储驱动程序,例如rancher-ebsrancher-nfs及其各自的选项。

答案 1 :(得分:0)

我认为你想要的是拥有整个项目的不同实例。 scale表示相同的克隆,但如果它们具有不同的数据,则它们不相同。

我会使用不同的项目名称来启动不同的实例,而不是使用比例:https://docs.docker.com/compose/overview/#multiple-isolated-environments-on-a-single-host