Несколько баз данных MariaDB в Docker - PullRequest
0 голосов
/ 04 мая 2018

Использование Docker (v.2) У меня настроена база данных в моем docker-compose.yml:

mysql:
    image: mariadb:latest
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: 'test'
      MYSQL_DATABASE: 'test'
      MYSQL_USER: 'test'
      MYSQL_PASSWORD: 'test'

Это отлично работает. Что мне нужно сделать, чтобы создать другую базу данных в том же контейнере?

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Я понимаю, что вы хотите создать две базы данных в одном контейнере, верно? Я думаю, что это идет вразрез с принципами архитектуры микросервисов.

В любом случае, я думаю, что это возможно, когда вы инициализируете свежий экземпляр:

Когда контейнер запускается в первый раз, будет создана новая база данных с указанным именем и инициализирована с помощью предоставленных переменных конфигурации. Кроме того, он будет выполнять файлы с расширениями .sh, .sql и .sql.gz, которые находятся в /docker-entrypoint-initdb.d. Файлы будут выполнены в алфавитном порядке.

Обновление файла в каталоге mariadb / mysql ссылка :

DROP USER IF EXISTS 'MYSQL_USER';
CREATE USER 'MYSQL_USER'@'%';
CREATE DATABASE IF NOT EXISTS MYSQL_DATABASE;
GRANT ALL ON MYSQL_DATABASE.* TO 'MYSQL_USER'@'%' IDENTIFIED BY 'MYSQL_PASSWORD';
 --------------your new NewDB----------------------
CREATE DATABASE IF NOT EXISTS NewDB;
GRANT ALL ON NewDB.* TO 'MYSQL_USER'@'%' IDENTIFIED BY 'MYSQL_PASSWORD';
0 голосов
/ 04 мая 2018

Это против того, для чего предназначен Докер. У вас должно быть несколько контейнеров, использующих один сервис каждый (здесь mariadb). Но если вы хотите, чтобы они отражали одно и то же состояние, вы должны использовать один из методов, предоставляемых базой данных (для mariadb вы можете найти множество в официальных документах здесь )

Одним из нативных механизмов, предоставляемых MariaDB, является master-slave replication, хорошо объясненный в официальном документе здесь . Также еще один эффективный механизм parallel replication объяснен и приведен в официальной документации здесь

Эти механизмы требуют небольшой настройки. Я не буду перечислять весь процесс, так как он хорошо объяснен в официальном документе с дополнительными примечаниями по безопасности и ремонтопригодности.

Пример для другой БД - база данных PostgreSQL может плавно запускаться во многих контейнерах и легко сбалансироваться по нагрузке, если вы разделяете том между теми экземплярами, которые совместно используют pg_data базы данных (каталог pg_data внутри volume делится между контейнерами). Подобные механизмы могут применяться к MariaDB.

Но Если вы действительно настаиваете на наличии нескольких служб в одном контейнере , вы можете написать сценарий bash, запускающий несколько баз данных, и выполнить этот сценарий с помощью command в Dockerfile или docker-compose.

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