#假如咱们应用程序须要一台 mssql 数据库来持久化数据,咱们将 mssql 数据库运行于 Docker 容器中:linux
docker run -d -p 1433:1433 -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<数据库SA帐户的密码>" --mount type=volume,src=mssqlvol,dst=/var/opt/mssql --name mssql mcr.microsoft.com/mssq l/server
sql
注意:-v
或者 --volume
标志适用于独立容器,--mount
标志适用于 Swarm 服务。可是在 Docker 17.06 版本以后, --mount
标志一样适用于独立容器。docker
执行上面的指令,若是 mssqlvol 不存在的话,会建立一个 mssqlvol 数据卷。它指向 mssql 容器的 /var/opt/mssql
目录, 此目录也是 mssql 数据库默认的数据存放目录。数据库
使用命令:ubuntu
docker run --rm -volumes-from mssql --mount type=bind,src=$(pwd),dst=/backup ubuntu tar cvf /backup/backup.tar /var/opt/mssql
bash
解析:测试
--rm
)$(pwd)
会输出当前终端的工做目录)做为容器的 /backup 目录tar cvf /backup/backup.tar /var/opt/mssql
来对 /var/opt/mssql
目录压缩为 backup.tar由于此临时容器挂载了本地目录做为 /backup 目录, 因此当咱们执行完上面的命令以后, 咱们会发现本地目录,也就是当前工做目录下会有 backup.tar 文件产生。至此备份完毕。网站
在建立一个 mssql 容器做为测试:spa
docker run -d -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<数据库SA帐户的密码>" -p 1434:1433 --mount type=volume,src=mssql-vol2,dst=/var/opt/mssql --name mssql2 mcr.microsoft.com/mssq l/server
rest
运行临时容器将备份文件解压缩至指定目录:
docker run --rm --volumes-from mssql2 --mount type=bind,src=$(pwd),dst=/backup ubuntu bash -c "tar xf /backup/backup.tar -C / && ls /var/opt/mssql/data -l"
执行完上述指令以后, 咱们会看到数据库文件已经存在于 /var/opt/mssql/data
文件夹下,至此,还原操做已经完成。
下面是拓展内容:
咱们上面使用的是 mssql 数据库, 这里文件的直接覆盖是不能完成附加操做的, 下面咱们须要手动附加数据库:
docker exec -it mssql2 /bin/bash
/opt/mssql-tools/bin/sqlcmd -S . -U sa -P '<帐户sa密码>'
使用 SELECT NAME FROM sys.Databases
来查看全部数据库名(须要键入 GO 才会执行)
sp_attach_db @dbname='须要附加的数据库名', @filename1='/var/opt/mssql/data/还原的数据库文件名'
执行完以后, 再使用 SELECT NAME FROM sys.Databases
就能够看到咱们还原的数据库了
另外,官方网站上也给出了一种数据库备份还原的方式。
应用数据的备份还原对于系统来讲是相当重要的, Volume 与 Bind Mount 都是很是实用的持久化介质。