0

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

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

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

是否有任何工具、最佳实践或模式可以帮助解决这个问题?

4

2 回答 2

2

在当前版本的 Rancher(此时为 v1.4)中,可以在环境基础架构级别插入存储驱动程序。这允许您创建在环境、堆栈或容器范围内的卷。

对于您的用例,听起来每个容器范围是您所需要的。使用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使用它们各自的选项。

于 2017-02-21T06:10:45.653 回答
0

我认为您想要的是拥有整个项目的不同实例。scale意味着相同的克隆,但如果它们具有不同的数据,它们就不相同。

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

于 2016-04-04T23:57:53.660 回答