@corruptzero

Docker. MySQL. Как сделать mapping контейнера к docker volume?

Здравствуйте.
Помогите с запуском контейнера, тут не хватает:
Обеспечить доступность сервиса по порту 3306
Обеспечить сохранение баз данных (мэппинг volume mysql-data)
Создать базу данных при запуске (указать имя БД, пользователя БД, пароль от пользователя)

Вот что я сделал:
docker run --name mysql --restart on-failure -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.36 --collation-server=utf8_general_ci

Застрял на этом моменте, помогите пожалуйста.
На docker hub говорят сделайте docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
но я не понимаю что к чему мэппить и зачем
  • Вопрос задан
  • 407 просмотров
Пригласить эксперта
Ответы на вопрос 1
@q2digger
никого не трогаю, починяю примус
Уже лучше, для начала официальная дока - https://docs.docker.com/storage/volumes/
в примере есть такая конструкция -v /my/own/datadir:/var/lib/mysql
она означает - монтировать в контейнер локальную папку /my/own/datadir
В контейнере база будет сохраняться в каталог /var/lib/mysql , как обычно, а на это место вы при старте контейнера примонтировали свою папку. Если в будущем, вы грохнете контейнер, то папка с данными останется.
С создать базу все тоже просто.
Вам надо приготовить файл чтото-там.sql , в котором описать создание базы, создание пользователей.
чтото типа
CREATE DATABASE mydb;

CREATE USER 'readuser'@'%' IDENTIFIED BY 'passwordforreaduser';
GRANT SELECT ON mydb.* TO 'readuser'@'%';

CREATE USER 'writeuser'@'%' IDENTIFIED BY 'passwordforwriteuser';
GRANT INSERT, UPDATE, SELECT, DELETE ON mydb.* TO 'writeuser'@'%';

и подмонтируете этот файл -v path/to/you/file:/docker-entrypoint-initdb.d/init.sql
при старте база его найдет в этой папке и выполнит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы