多个客户端的多个docker实例

时间:2019-03-11 08:42:10

标签: docker deployment

我正在对一些遗留应用程序(Web + Service + C ++应用程序)进行容器化,这些应用程序在Linux环境上运行,目前有10个以上的客户端。

我可以从docker设置并运行应用程序(c ++应用程序)。由于该应用程序将读取一些属性文件,这对于不同的客户端将是不同的。所以我试图挂载驱动器以在docker外部共享数据(运行时某些文件可能会更改)。

但是我最大的担心是如何为运行时间(在内存状态下)不同的不同客户端运行单个容器? (应用程序将永远运行,直到有人杀死/停止它为止。)

我是否需要为 n 个客户端运行 n 个容器?

在这种情况下,docker swarm / kubernetes是否具有某些属性?

每个客户都将获得自己的专用容器吗?

对于这种情况,您还可以建议进一步阅读/学习吗?

对于数据库-由于每个客户端将具有不同的数据-应该使用不同的数据库?

非常感谢。

2 个答案:

答案 0 :(得分:0)

您可以通过为容器提供唯一的名称和环境变量来隔离它们。

示例:

docker run --name client1 --env-file ./client1.env your-image-name-here

使用这种方法,您可以具有隔离的环境和配置,这些环境和配置分别针对每个上下文。

您需要N个容器用于N个客户端。但是您可以对N个容器使用相同的图像。因此,每个客户一个容器,每个容器都将通过其自己的唯一名称和环境变量来标识。

答案 1 :(得分:0)

听起来像您的基本需求是:

  • 每个人都适用的应用程序
  • 每个客户端一个配置
  • 每个客户一个数据库

第一点很容易理解:“ 相同的应用程序=相同的图像”。

然后,个性化应用程序所需的就是配置和数据库路径。 如果要对数据库进行容器化,问题将是相同的,假设您有一个数据库URL(它可以是一个容器:没关系)。

有多种选项可以个性化您的应用程序:

  • 继承通用图像,然后根据需要将其拒绝出现在尽可能多的图像中……这严重影响了可维护性
  • 通过“ docker-compose”添加自定义,这样更易​​于阅读,编写和维护!

如果每个客户端可以有一个实例,则只需为每个客户端使用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,但这只是一个例子。

对于应通过“ config”和“秘密” mecanisms进行管理的配置文件和敏感数据,有更好的机制。