База данных в докер-контейнерах - изображения только для чтения и долговечность

Изображения Docker доступны только для чтения. Когда мы создаем экземпляр контейнера из образа, процессы, размещенные в контейнере, могут записывать на диск, но эти изменения не сохраняются после перезапуска контейнера. Существует множество докер-контейнеров, на которых размещаются службы баз данных, такие как Sql Server: https://hub.docker.com/r/microsoft/mssql-server-windows/

Разве природа образов Docker, доступная только для чтения, не противоречит цели создания надежных баз данных? Что я вижу не так?

Кстати, я вижу большое удобство использования этого типа только для чтения в автоматизированных тестах (нет необходимости откатываться), но это не основное использование БД.

2 ответа

Решение

Если вы хотите, чтобы надежные данные сохранялись после перезапуска вашего контейнера, вы можете использовать том для хранения данных.

Образ MySQL использует /var/lib/mysql каталог для хранения "живых" данных базы данных. Если вы сопоставите эту папку с томом Docker, он выживет, перезапустится и удалит контейнер - если вы также не удалите том. Возможно, что образ MS SQL имеет аналогичный каталог, который можно сопоставить с томом, чтобы сделать данные более надежными.

Вы правы, что поведение по умолчанию не должно быть долговечным (отлично подходит для одноразовых тестов), но если вы хотите, чтобы оно выжило, вы можете использовать тома.

Существует два способа поддержки баз данных SQL Server в контейнерах. Использование ADDDB скопирует БД в частную файловую систему контейнера, и эта база данных может сохраняться до тех пор, пока контейнер не будет удален. База данных будет остановлена ​​при остановке контейнера и повторно подключена при запуске контейнера. Однако он будет потерян при удалении контейнера. Альтернативой является использование MOUNTDB, который монтирует базу данных в контейнер либо с локального хоста, либо с удаленного. В этом случае файл сохраняется, если контейнер удален.

Другие вопросы по тегам