我正在对一些遗留应用程序(Web + Service + C ++应用程序)进行容器化,这些应用程序在Linux环境上运行,目前有10个以上的客户端。
我可以从docker设置并运行应用程序(c ++应用程序)。由于该应用程序将读取一些属性文件,这对于不同的客户端将是不同的。所以我试图挂载驱动器以在docker外部共享数据(运行时某些文件可能会更改)。
但是我最大的担心是如何为运行时间(在内存状态下)不同的不同客户端运行单个容器? (应用程序将永远运行,直到有人杀死/停止它为止。)
我是否需要为 n 个客户端运行 n 个容器?
在这种情况下,docker swarm / kubernetes是否具有某些属性?
每个客户都将获得自己的专用容器吗?
对于这种情况,您还可以建议进一步阅读/学习吗?
对于数据库-由于每个客户端将具有不同的数据-应该使用不同的数据库?
非常感谢。
答案 0 :(得分:0)
您可以通过为容器提供唯一的名称和环境变量来隔离它们。
示例:
docker run --name client1 --env-file ./client1.env your-image-name-here
使用这种方法,您可以具有隔离的环境和配置,这些环境和配置分别针对每个上下文。
您需要N个容器用于N个客户端。但是您可以对N个容器使用相同的图像。因此,每个客户一个容器,每个容器都将通过其自己的唯一名称和环境变量来标识。
答案 1 :(得分:0)
听起来像您的基本需求是:
第一点很容易理解:“ 相同的应用程序=相同的图像”。
然后,个性化应用程序所需的就是配置和数据库路径。 如果要对数据库进行容器化,问题将是相同的,假设您有一个数据库URL(它可以是一个容器:没关系)。
有多种选项可以个性化您的应用程序:
如果每个客户端可以有一个实例,则只需为每个客户端使用docker-compose。 如果您碰巧需要更多,请进入群集模式(也可以将群集模式用于一个实例)。
在这两种情况下,您都需要一个docker-compose(实际上您并不需要,因为您可以通过命令行完成所有操作,但是对我的opov来说维护起来不那么容易,解释起来也不那么容易!)。
可能看起来像这样:
version: "3.7"
my-service:
image: your/common/image:1.0
volume:
- /a/path/from/host/with/confs:/a/path/to/container/conf/dir # will replace content there!
environment:
- "DB_URL=my-cny.denver.com:3121/db_client" # can vary or be the same if DB_NAME vary instead
- "DB_NAME=my-cny.denver.com:3121/db_client_1" #vary the name of the DB
- "DB_PSSWD=toto"
...
有些事情您不应该执行,例如在此处编写清晰的PWD,但这只是一个例子。