太多的码头坐骑
问题描述:
我有一个码头图像内的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
答
好了,我什么地方想你的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
这可以工作,虽然我正在寻找一个更优雅的解决方案。 –
你的解决方案原来是最好的 –