То, что вы делаете, звучит так, как ваши основные потребности:
- одно и то же приложение для всех
- одна конфигурация на клиента
- одна БД на клиента
Первый пункт легко решить: " то же приложение = то же изображение ".
Тогда для персонализации приложения вам потребуется конфигурация и путь к БД,Если вы хотите контейнировать БД, вопросы будут такими же, скажем, вместо этого у вас есть 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 .