Локальная база данных в Docker
August 29, 2024Как быстро поднять локальный сервер базы данных для разработки в Docker. Способов существует полно, но мне нравится использовать для разработки абстрагированные подходы, с минимальным вмешательством в систему. Это гайд настройки локальной БД при помощи Docker.
Что понадобится:
1. Установленный Docker. Инструкция по установке.
2. Образ сервера базы данных. Например, MariaDB. Образ на Docker Hub.
3. Клиент для работы с базами данных. Например, TablePlus.
Запуск сервера БД в Docker:
docker run --detach --name mydb \
-p 33067:3306 --env MARIADB_ROOT_PASSWORD=root mariadb:latest
Стоит обратить внимание, что:
- mydb
— имя контейнера, в котором будет работать база данных
- 33067:3306
— здесь 33067 внешний порт, который будет использоваться для подключения к базе данных
- 1234
— пароль для пользователя root
Остановка сервера:
Для остановки и удаления контейнера с базой данных выполните команду:
docker stop mydb && docker rm mydb
Проверка запущенных контейнеров:
Если забыли название контейнера или порт, можно просмотреть список всех запущенных контейнеров с помощью команды:
docker ps
Вывод команды docker ps
Подключение к базе данных:
После запуска контейнера можно подключиться к базе данных через TablePlus. В текущем примере это:
- Хост: 127.0.0.1
- Порт: 33067
- Пользователь: root
- Пароль: 1234
Настройки подключения к БД
После подключения можно создать базы данных и таблицы через интерфейс клиента или sql запросы.
Создание новой БД
Сохранение данных:
Чтобы данные не пропали при остановке или удалении контейнера, можно настроить постоянное хранилище, указав volume (том) в команде запуска контейнера. Пример:
docker run --detach --name mydb \
-p 33067:3306 -v ./databases:/var/lib/mysql \
--env MARIADB_ROOT_PASSWORD=1234 mariadb:latest
В этом примере локальная директория ./databases
будет привязана к директории /var/lib/mysql
внутри контейнера, где БД MariaDB хранит свои данные. Таким образом, данные сохранятся на локальной машине и останутся доступными даже после перезапуска контейнера.