Данные MySQL в Docker
Данные MySQL лежат в томе,
и новый контейнер сервера
их не стирает.
Каталог /var/lib/mysql
монтируют в именованное
хранилище dbdata,
объявленное в корне описания.
Удаление только контейнера
оставляет файлы таблиц
на месте.
Сервис db
на mysql:9.7
с паролем root demo
и томом dbdata.
Сайт на nginx и FPM
здесь не меняем -
важен только сервер данных:
services:
db:
image: mysql:9.7
environment:
MYSQL_ROOT_PASSWORD: demo
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
После фонового подъёма создадим учебную таблицу командой клиента внутри уже запущенной копии:
docker compose up -d
docker compose exec db mysql -uroot -pdemo -e "CREATE TABLE notes (id INT PRIMARY KEY AUTO_INCREMENT, body VARCHAR(255)); INSERT INTO notes (body) VALUES ('keep');"
Остановим проект без удаления томов, снова поднимем сервис и спросим строку из таблицы:
docker compose down
docker compose up -d
docker compose exec db mysql -uroot -pdemo -e "SELECT body FROM notes LIMIT 1;"
В ответе клиента
остаётся слово keep -
данные пережили
новый контейнер сервера,
потому что лежат в dbdata,
а не в слое копии.
Подключите том mysqlfiles к /var/lib/mysql для db и сохраните в таблице marks одну строку stay.
После остановки проекта без снятия тома и повторного подъёма убедитесь, что эта строка на месте.