Можно удалить контейнеры с помощью нескольких способов, которыми я объясню их в остальной части ответа.
docker container prune
. Эта команда удаляет все контейнеры, которые не работают правильно теперь. Можно узнать, какие контейнеры не работают путем сравнения вывода docker ps
и docker ps -a
. Контейнеры, которые перечислены в docker ps -a
и не существуют в docker ps
, не работают правильно теперь, но их контейнеры не удалены.
docker kill $(docker ps -aq)
. То, что делает эта команда, - то, что путем выполнения $(docker ps -aq)
она возвращает список идентификаторов всех контейнеров, и уничтожьте их. Когда-то эта команда не работает, потому что это - использование рабочим контейнером. Чтобы заставить это работать, можно использовать --force
опция.
docker rm $(docker ps -aq)
. Это имеет то же определение как вторая команда. Единственная разница их - то, что это удаляет контейнер (как то же как чернослив докера), в то время как эти docker kill
не делает.
Иногда необходимо удалить изображение, потому что Вы изменили конфигурацию Dockerfile
и должны удалить ее для восстановления ее. С этой целью Вы видите все изображения путем выполнения docker images
и затем копируете идентификатор изображения, которое Вы хотите удалить. Это может быть удалено просто путем выполнения docker image rm <image-id>
.
пз: можно использовать docker ps -a -q
вместо [1 114] и нет никаких различий. Поскольку в основанной на Unix операционной системе, можно присоединиться к опциям как вышеупомянутый пример.
В мультитенантных системах вы столкнетесь с целым рядом проблем. Мои быстрые мысли приведены ниже
Все SQL должны быть проверены и рефакторинг для включения ClientId ценность.
Все индексы должны быть проверены на определить, должен ли ClientId быть включен
Ошибка в инструкции SQL из-за разработчик / системный администратор в производстве будет повлияют на всех ваших клиентов.
Повреждение / проблема базы данных приведет к влияют на всех ваших клиентов
У вас есть проблемы с конфиденциальностью данных в результате плохой код / реализация могут позволить customerA видеть принадлежащие в CustomerB
Клиент, использующий вашу систему в тяжелая / агрессивная манера может повлиять восприятие производительности другими клиентами
Адаптация статических данных к предпочтениям отдельных клиентов становится более сложной.
Я уверен, что есть ряд других проблем, но это были мои первоначальные мысли.
Это действительно зависит от того, что вы делаете.
Мы создаем программу MIS для полиграфической промышленности, которая отслеживает запасы, сотрудников, клиентов, оборудование и выполняет некоторые серьезные вычисления для оценки затраты на выполнение заданий, основанные на большом количестве входных переменных.
Мы ожидаем очень больших баз данных для каждого клиента, и в настоящее время у нас есть 170 таблиц. Добавление еще одного столбца почти в каждую таблицу только для хранения client_id вредит моему мозгу.
В настоящее время мы находимся на стадии бета-тестирования нашей программы, и вот некоторые вещи, с которыми мы столкнулись:
Если у вас есть конкретные вопросы по любому из них, я могу помочь.
Если у вас есть конкретные вопросы по любой из них, я могу помочь.
Если у вас есть конкретные вопросы по любой из них, я могу помочь.
или выполняются все миграции? Как обеспечить согласованность схемы между вашей системой создания таблиц и вашими действующими базами данных?Если у вас есть конкретные вопросы по любому из них, я могу помочь.
или выполняются все миграции? Как обеспечить согласованность схемы между вашей системой создания таблиц и вашими действующими базами данных?Если у вас есть конкретные вопросы по любому из них, я могу помочь.
Мы используем файл cookie для хранения уникального значения, которое соответствует правильной базе данных. Мы используем предварительный фильтр в авторизованном контроллере, который наследуется от ActionController, который получает db из этого уникального значения и использует метод install_connection в подклассе ActiveRecord :: Base. Это позволяет нам получать одни модели из общей базы данных, а другие из конкретной базы данных клиента.Если у вас есть конкретные вопросы по любой из них, я могу помочь.
Мы используем файл cookie для хранения уникального значения, которое соответствует правильной базе данных. Мы используем предварительный фильтр в авторизованном контроллере, который наследуется от ActionController, который получает db из этого уникального значения и использует метод install_connection в подклассе ActiveRecord :: Base. Это позволяет нам получать одни модели из общей базы данных, а другие из конкретной базы данных клиента.Если у вас есть конкретные вопросы по любой из них, я могу помочь.
Зачем? У вас сильная агрегация между пользователями или вы создаете слишком много БД? Рассматривали ли вы использование файлов SQLite для каждого клиента вместо общих серверов БД (поскольку многопользовательские приложения часто являются низкопрофильными и не требуют такого большого параллелизма)?
Лично у меня нет опыта в этом, но во время молниеносных переговоров на Ruby Hoedown 2009 Эндрю Коулман представил плагин, который он разработал и использует для мультитенантных баз данных в рельсах. поддомены. Вы можете посмотреть слайды Lightning Talk и вот репозиторий plays_as_restricted_subdomain .
Я исследовал то же самое и обнаружил, что эта презентация предлагает интересное решение: использование схем Postgre (немного похожих на пространства имен) для разделения данных на уровне БД с сохранением всех клиентов в та же БД и остается (в основном) прозрачным для рельсов.