太多的码头坐骑

问题描述:

我有一个码头图像内的Web应用程序。 Web应用程序是一个有点复杂,所以每次我创建我的应用程序内一个新的组件时我必须安装另一个directory.The问题是,我将最终有太多的坐骑命令:太多的码头坐骑

docker run -v ... -v ... -v ... ... myimage 

是有更好的解决方案吗?

码头化的主要思想是你有不变的容器,你可以在任何地方运行相同的结果(无状态)。如果你的容器有状态,那么你的应用程序可能会有糟糕的架构解也许你应该分开你的应用程序两个。例如,第一个应用程序将是无状态的,另一个将管理您的第一个应用程序存储。作为一个变体,你可以在只有一个卷创建的所有新目录:

-v ./app_state:/app_state 

下一个app_state目录结构

app_state 
|__ subvolume_1 
|__ subvolume_2 
| 
. 
. 
. 
|__ subvolume_n 
+0

你的解决方案原来是最好的 –

如果问题在于命令变得太长而无法在终端中键入,则可以使用docker撰写或自定义脚本。然后,您可以装载任意数量的卷,而无需在启动容器时重写所有内容。

+0

卷不是静态的,每次我有时间来添加一个新的安装到现有的坐骑。 –

+0

你能举个例子吗? – Delaballe

+0

我不确定它会适合您的需求,但您可以查看https://clusterhq.com – Delaballe

好了,我什么地方想你的web应用程序存储在数据库中的列表它们存储在文件系统中的项目和路径。如果您可以修改Web应用程序的源代码,也许可以添加一个创建映射项目路径的文件的过程。然后创建一个脚本来启动你的容器,并在该文件中加载每个项目(通过用awk解析它)。如果您无法修改网络应用程序,我相信您至少可以访问数据库中的项目列表并直接在您的容器的运行脚本中进行解析过程

因此,您的网络应用程序会创建如下文件:

Project1 /opt/project1 
Project2 /opt/project2 

,你容器的行书的样子说:

#!/bin/bash 

VOLUMES=$(cat projects.txt | awk '{print "-v " $2":/home/"$1}') 
COMMAND=$(docker run $VOLUMES myimage) 
+0

这可以工作,虽然我正在寻找一个更优雅的解决方案。 –