我目前正试图在使用Rancher扩展容器(或者Docker Compose,因为这更像是一个抽象的问题)时弥补持久但独特的卷之间的差距。
以Minecraft服务器为例,我在Rancher / Compose中定义了一个服务,它使用命名卷作为其数据/世界目录(例如-v minecraft_data:/ data,其中Minecraft图像从此处加载其世界文件/数据目录)。我之所以使用这样一个命名卷,是因为我希望它在服务升级之间保持不变(例如我改变图像版本,或者想要改变一些环境变量),这是不可能的。匿名卷。
现在,在尝试扩展我的服务时,我要么让多个容器访问相同的数据(对许多用例不利),要么在使用匿名卷时失去服务可升级性。
是否有任何可能有助于解决此问题的工具,最佳做法或模式?
答案 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-ebs
或rancher-nfs
及其各自的选项。
答案 1 :(得分:0)
我认为你想要的是拥有整个项目的不同实例。 scale
表示相同的克隆,但如果它们具有不同的数据,则它们不相同。
我会使用不同的项目名称来启动不同的实例,而不是使用比例:https://docs.docker.com/compose/overview/#multiple-isolated-environments-on-a-single-host