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

Scaling Docker containers in Rancher with different but persistent volumes

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

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

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

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

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

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

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

对于您的用例,听起来 per-container scope 就是您所需要的。使用 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 及其各自的选项。