如何備份還原 Docker Volume
記載一下備份、還原 Docker Volume 的相關操作
對於 Docker 我也不是很熟,所以就跳過理論性的東西,直接紀錄步驟吧,針對 Docker 服務所使用到的 Volume 備份及還原方式,使用的環境是 Docker For Windows CE,採用的是 Linux Container 模式。
前置作業
首先先建立 SQL 的 DockerVolume
1 | docker volume create linux_mssql |
建立一個 MSSQL Linux Container,命名為 linuxMSSQL,從指令列中可看到 sa 的預設密碼是 Passw0rd!,等等就用這個測試
1 | docker run --name linuxMSSQL -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Passw0rd!" -p 1433:1433 -v linux_mssql:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2017-latest |
記得自己要弄的話,SA 預設密碼最好改一下
建立完成之後可以連進去塞一些假資料用來測試,這邊就不貼圖了
備份 Volume
透過 alpine 這個 Image,掛載與 SQL 服務相同的 Volume,連線進去 alpine Container 之後,對 Volume 操作,最後再透過 docker commit
、docker save
指令讓 container 做成一個新的 Image,再把 Image 輸出成實體檔案之後,就可以針對實體檔案進行備份了。
1 | 讓 Image 掛載相同的 Volume |
在這個環節其實可以先透過指令docker exec -it mssqlBackup sh
連線進去查看 Volume 的實體檔案有哪些,甚至也可以直接把 mdf 檔案抓出來備份之類的,但是採用 Volume 方式備份的好處就是不用管甚麼服務,都是一樣將 Volume 備份、還原,而且可以再考慮架設自己的 Docker Registry,會更便捷
接下來將剛才處理好的 alpine image 弄成實體檔案來備份
1 | 將mssqlBackup打包成一個新的images:linux-mssql-volume |
到這邊就完成了備份的動作,為了測試需要,可以只保留實體檔案,先將相關的 images、用到的 volume 都砍掉,來模擬新主機還原的作業,如果有第二台電腦可以試,那就直接將實體檔案 copy 過去就好了。
還原 Volume
首先一樣先建立一個 Docker Volume,等等還原會用到,建議用相同名稱就好了,接著將實體檔案透過指令載入成 Image,最後掛載成 Container 之後將檔案複製到我們建立的 Docker Volume 即可。
1 | 建立 Docker Volume |
到這邊就完成了 Docker Volume 的還原,接下來只要重新執行前置作業中的建立 MSSQL Container 就可以接著使用了。
如何將 Windows 環境底下的 Docker Volume 備份一直很困擾我,看了這篇文章之後才發現原來解法這麼簡單,直接掛載一個 Linux 可以操作指令的 Container,將 Volume 共用,就可以針對檔案操作了,那篇文章內是用 Docker Register 作範例,有興趣的人可以參考一下