Несколько экземпляров докера для нескольких клиентов - PullRequest
0 голосов
/ 11 марта 2019

Я выполняю контейнеризацию некоторых устаревших приложений (web + service + c ++ app), которые работают в среде linux и в настоящее время имеют более 10 клиентов.

Я мог бы настроить и запустить приложение (приложение c ++)из докера.Так как приложение собирается прочитать некоторый файл свойств, который будет отличаться для разных клиентов.Поэтому я попытался смонтировать диск для совместного использования данных вне докера (во время выполнения некоторые файлы могли быть изменены).

Но меня больше всего беспокоит то, как запустить один контейнер для разных клиентов, чье время выполнения (в состоянии памяти) будет разным?(Приложение будет работать вечно, пока кто-нибудь не убьет / не остановит его).

Нужно ли запускать n контейнеров для n клиентов?

Есть ли свойство docker swarm / kubernetes для такого сценария?

Каждый клиент получит свой собственный выделенный контейнер?

Можете ли вы предложить также дальнейшее чтение / изучение для таких сценариев?

И для базы данных - поскольку каждый клиент будет иметьразные данные - разные БД должны использоваться?

спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

То, что вы делаете, звучит так, как ваши основные потребности:

  • одно и то же приложение для всех
  • одна конфигурация на клиента
  • одна БД на клиента

Первый пункт легко решить: " то же приложение = то же изображение ".

Тогда для персонализации приложения вам потребуется конфигурация и путь к БД,Если вы хотите контейнировать БД, вопросы будут такими же, скажем, вместо этого у вас есть URL БД (это может быть контейнер: это не имеет большого значения).

Существуют различныеварианты персонализации ваших приложений:

  • наследуют от общего изображения и отклоняют его в любом количестве изображений, что вам нужно ... с серьезным влиянием на удобство обслуживания
  • добавьте настройку через " docker-compose", который легче читать, писать и поддерживать!

Если один экземпляр для каждого клиента в порядке, просто используйте docker-compose для каждого клиента.Если вам понадобится больше, перейдите в режим роя (вы также можете использовать режим роя для одного экземпляра).

В обоих случаях вам понадобится docker-compose (на самом деле вам НЕ НУЖНОэто потому, что вы можете делать все то же самое через командную строку, но это менее легко для поддержки моих опов, и менее легко объяснить!).

Это может выглядеть так:

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 " и "secret" mecanisms .

0 голосов
/ 11 марта 2019

Вы можете изолировать контейнеры, предоставив им уникальное имя и переменные среды.

Пример:

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

При таком подходе вы можете иметь изолированные среды и конфигурации, которые являются уникальными для каждого контекста.

Вам нужно N контейнеров для N клиентов. Но вы можете использовать одно и то же изображение для N контейнеров. Таким образом, один контейнер на клиента и каждый контейнер будет идентифицироваться по своему уникальному имени и переменным среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...