Docker教程小白實操入門(21)--如何備份、恢復資料卷
一、需求
如何備份、恢復資料卷
二、備份一個資料卷
1. 建立一個容器dbcontainer1和資料卷db1
# 建立一個容器dbcontainer1,並建立了一個名為db1的資料卷,將資料卷掛在到容器的/dbdate目錄
docker run -v db1:/dbdate --name dbcontainer1 ubuntu
2. 進入一個空白目錄,建立一個新容器,新容器與dbcontainer1
容器共享dbdata
掛載目錄
# 使用--volumes-from建立一個新容器,新容器與container1容器共享dbdata掛載目錄,同時把主機上的當前目錄掛載到容器的/backup目錄
docker run --volumes-from dbcontainer1 -v $(pwd):/backup ubuntu tar -cvf /backup/backup.tar /dbdata
容器啟動後,使用了tar
命令來將 dbdata
目錄壓縮,並儲存在 /backup/backup.tar
檔案中。
由於主機的當前目錄掛載在容器的/backup
目錄下,而繫結掛載的兩個目錄的內容完全保持一致,所以相當於將dbcontainer1
資料卷的內容壓縮後備份到了宿主機的當前目錄了 。
三、恢復一個資料卷
假設一不小心名為db1
的資料卷給刪除掉了,可以這麼恢復:
1. 首先建立一個帶有空資料卷的容器dbcontainer2
,掛載目錄為/dbdata
,資料卷名為db1
docker run -v db1:/dbdata --name dbcontainer2 ubuntu /bin/bash
2. 進入之前儲存backup.tar
的宿主機目錄,在該目錄下執行下面命令
docker run --volumes-from dbcontainer2 -v $(pwd):/backup busybox tar -xvzf /backup/backup.tar -C /dbdata
該命令建立一個新容器,新容器與dbcontainer2
容器共享dbdata
掛載目錄,同時將主機的當前目錄掛載的容器的/backup
中。
啟動容器時,使用tar
命令將資料卷的備份檔案backup.tar
解壓到/dbdata
目錄,由於該容器與dbcontainer2
容器共享一個資料卷,也就相當於將backup.tar
解壓到了dbcontainer2
的/dbdata
目錄。
又因為dbcontainer2
將名為db1
的資料卷掛載到了/dbdata
上,所以實質上就將db1
的資料卷內容完全恢復了!
四、例項
#!/bin/bash
#拉取ubutun 最新映象,實際生產中,docker pull 這一步可以省略,docker run的時候會自己去拉取。
docker pull ubuntu
# 建立一個vo1的資料卷,並在資料卷中新增1.txt檔案
docker run --name vocontainer1 -v vo1:/dir1 ubuntu touch /dir1/1.txt
#1.將vo1資料卷的資料備份到宿主機的/newback中,將容器的/backup路徑掛載上去,並將容器內/dir1資料夾打包至/backup/backup.tar
#********** Begin *********#
docker run --volumes-from vocontainer1 -v /newback:/backup ubuntu tar -cvf /backup/backup.tar /dir1
#********** End **********#
#刪除所有的容器以及它使用的資料卷
docker rm -vf $(docker ps -aq)
docker volume rm vo1
#再次建立一個vo1的資料卷
docker run -itd --name vocontainer2 -v vo1:/dir1 ubuntu /bin/bash
#2.將儲存在宿主機中備份檔案的資料恢復到vocontainer2的/中
#********** Begin *********#
docker run --volumes-from vocontainer2 -v /newback:/backup ubuntu tar -xvf /backup/backup.tar -C /
#********** End **********#
相關文章
- Docker Swarm 進階:資料卷備份與恢復DockerSwarm
- MySQL備份與恢復——實操MySql
- docker mysql8.0 啟動,掛資料卷,定時備份,恢復~DockerMySql
- Active Directory 恢復與備份最佳實操
- 《MySQL 入門教程》第 06 篇 備份與恢復MySql
- 《入門MySQL—備份與恢復》MySql
- 入門MySQL——備份與恢復MySql
- RabbitMQ如何備份與恢復資料MQ
- 備份與恢復:polardb資料庫備份與恢復資料庫
- MySQL入門--備份與恢復(三)MySql
- MySQL入門--備份與恢復(一)MySql
- MySQL入門--備份與恢復(二)MySql
- 利用docker-compose恢復gitlab備份的資料DockerGitlab
- 如何恢復Hyper Backup備份的資料
- Grafana 備份恢復教程Grafana
- 資料庫備份恢復資料庫
- Mysql資料備份與恢復MySql
- docker 中 MySQL 備份及恢復DockerMySql
- NoSQL 資料庫案例實戰 -- MongoDB資料備份、恢復SQL資料庫MongoDB
- Mysql資料庫備份及恢復MySql資料庫
- 達夢資料庫備份恢復資料庫
- gitlab的資料備份和恢復Gitlab
- 磁碟資料恢復及備份工具資料恢復
- postgresql備份與恢復資料庫SQL資料庫
- RAC備份恢復之Voting備份與恢復
- Nodejs教程21:資料庫入門NodeJS資料庫
- SqlServer資料庫恢復備份資料的方法SQLServer資料庫
- Docker容器中的備份、恢復、遷移、匯入、匯出Docker
- 資料庫備份與恢復技術資料庫
- Mongo 資料庫備份和恢復命令Go資料庫
- pg_dump 備份,恢復資料庫資料庫
- PostgreSql資料庫的備份和恢復SQL資料庫
- 備份與恢復:Polardb資料庫資料基於時間點恢復資料庫
- 帝國cms備份和恢復 帝國cms恢復資料
- linux snapper/lvm2卷 建立、備份與恢復LinuxAPPLVM
- Docker的那些事兒—Docker卷資料恢復或遷移(33)Docker資料恢復
- mysql資料庫-備份與還原實操MySql資料庫
- OceanBase物理備份恢復實踐