#假如咱們應用程序須要一臺 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 都是很是實用的持久化介質。