如何使用 Docker 和 Docker Compose 从备份开始自动创建和 运行 "clean" SQL 服务器数据库?

How to automate creating and running a "clean" SQL Server database starting from a backup using Docker and Docker Compose?

我在一家使用小型 SQL 服务器备份文件处理引导数据库的公司入职。我更愿意避免使用各种中间件污染我的主要 Windows 安装,所以我想尽可能多地对这些中间件进行 dockerize。

也就是说,我对 SQL 服务器管理不是很熟悉,所以对于如何完成细节以及我的想法是否正确,我有些不知所措。

我正在考虑两种基本方法:


那么我的问题是:

  1. 如果这两种方法都可行,哪种方法更好?
  2. 是否有更好的方法来完成从容器中的 .bak -> 工作数据库?
  3. 如何使用命令行将 SQL 服务器数据库备份恢复到特定路径 - 即容器内的 "C:\Data"。 (这将使用卷映射到主机目录。)

不清楚您何时需要重置容器数据库的状态,您的两个选项听起来都行得通。

如果对备份的更改需要重建数据库,这可以在两阶段 windows 容器中非常有效地完成:

from microsoft/mssql-server-windows-developer as db_restore
copy db.bak \.

run Invoke-Sqlcmd -Query \"restore database [temp] from disk = 'c:\db.bak' \
  with move 'Db_Data' to 'c:\db.mdf', \
  move 'Db_Log' to 'c:\db.ldf'\"

run Invoke-Sqlcmd -Query \"shutdown with nowait\"

from microsoft/mssql-server-windows-developer
workdir \data
copy --from=db_restore \db.mdf .
copy --from=db_restore \db.ldf .

run Invoke-Sqlcmd -Query \"create database [Db] \
  on primary ( name = N'Db_Data', filename = N'c:\data\db.mdf') \
  log on (name = N'Db_Log', filename = N'c:\data\db.ldf') for attach\"