Docker 學習筆記(持久化數據的備份,還原)

#假如咱們應用程序須要一臺 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/serversql

注意:-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/mssqlbash

解析:測試

  1. 啓動一個新的容器而且從 mssql 容器進行掛載數據卷 (設置了此容器自動移除 --rm
  2. 此容器掛載本地主機的文件夾 ($(pwd) 會輸出當前終端的工做目錄)做爲容器的 /backup 目錄
  3. 執行 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/serverrest

運行臨時容器將備份文件解壓縮至指定目錄:

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 都是很是實用的持久化介質。

相關文章
相關標籤/搜索