我目前正在尝试在使用Rancher扩展容器的同时弥合持久但独特的卷之间的差距(或者是Docker Compose,因为这更多是一个抽象的问题)。
以Minecraft服务器为例,我在Rancher / Compose中定义了一个服务,该服务使用命名卷作为其data / world目录(例如-v minecraft_data:/ data,Minecraft镜像从该/ data目录加载其世界文件) 。我使用这样的命名卷的原因是,我希望它在服务升级之间保持不变(例如,我正在更改镜像版本,或者想要更改一些环境变量),而匿名卷是不可能的。
现在,当尝试扩大服务规模时,要么让多个容器访问相同的数据(在许多用例中都不好),要么在使用匿名卷时失去服务的可升级性。
是否有任何工具,最佳做法或模式可能有助于解决此问题?
最佳答案
在当前版本的rancher(当前为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
及其各自的选项。
关于docker - 在Rancher中扩展具有不同但持久卷的Docker容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36379879/