数据卷
數據卷與目錄
docker run -itd --name 【容器的名字】 -v 【宿主機目錄】:【容器目錄】 【依賴鏡像】【命令可選】docker run -itd --name tmp-nginx -v /home/abc/tmp/:/tmp-text nginx數據卷與文件
docker run -itd --name 【容器的名字】 -v 【宿主機文件】:【容器文件】 【依賴鏡像】【命令可選】docker run -itd --name tmp-txt -v /home/abc/tmp/hello.go:/nihao/nihao.sh nginx創建1個數據卷容器
格式 :
docker create -v 【容器數據卷目錄】 --name 【容器名稱】 【依賴的鏡像名稱 】 【命令可選】docker create -v /data-tmp --name v-tmp nginx創建兩個容器掛載同一個數據卷容器進行交互
格式:
docker run --volumes-from【數據卷容器的id或名字】-itd --name 【容器名字】 【鏡像名字】【參數可選]docker run --volumes-from v-tmp -itd --name tmp01 nginx docker run --volumes-from v-tmp -itd --name tmp02 nginx數據卷容器
需要在多個容器之間共享一些持續更新的數據,最簡單的方式就是使用數據卷容器.數據卷容器也是一個容器,但是他的目的是專門用來提供數據卷供其他容器掛載
數據卷容器:使用特定容器維護數據卷
如果使用數據卷容器,在多個容器之間共享數據,并永久保存這些數據,需要有一個規范流程才能做到
注意: 數據卷容器自身并不需要啟動,但是啟動的時候依然可以進行數據卷容器的工作
創建一個數據卷容器
創建兩個容器,同時掛載數據卷容器
#命令格式: docker create -v [容器數據卷目錄] --name [容器名字][鏡像名稱] [命令(可選)] #執行效果 $ docker create -v /data --name v1-test1 nginx創建兩個容器,同時掛載數據卷容器
#命令格式: docker run --volumes-from [數據卷容器id/name] -tid --name [容器名字][鏡像名稱] [命令(可 選)] #執行效果: #創建 vc-test1 容器: docker run --volumes-from 4693558c49e8 -tid --name vc-test1 nginx /bin/bash #創建 vc-test2 容器: docker run --volumes-from 4693558c49e8 -tid --name vc-test2 nginx /bin/bash確認卷容器共享
#進入vc-test1,操作數據卷容器: :~$ docker exec -it vc-test1 /bin/bash root@c408f4f14786:/# ls /data/ root@c408f4f14786:/# echo 'v-test1' > /data/v-test1.txt root@c408f4f14786:/# exit #進入vc-test2,確認數據卷: :~$ docker exec -it vc-test2 /bin/bash root@7448eee82ab0:/# echo 'v-test2' > /data/v-test2.txt root@7448eee82ab0:/# ls /data/ v-test1.txt root@7448eee82ab0:/# exit #回到vc-test1進行驗證 :~$ docker exec -it vc-test1 /bin/bash root@c408f4f14786:/# ls /data/ v-test1.txt v-test2.txt root@c408f4f14786:/# cat /data/v-test2.txt v-test2數據備份原理
為什么需要數據備份和恢復? 工作中很多的容器的數據需要查看,所有需要備份將數據很輕松的拿到本地目錄
數據備份方案:
數據備份實踐
在2.3.4的數據卷容器基礎上做數據的備份
#命令格式: $ docker run --rm --volumes-from [數據卷容器id/name] -v [宿主機目錄]:[容器目錄][鏡像名稱] [備份命令] #命令演示: #創建備份目錄: $ mkdir /backup/ #創建備份的容器: $ docker run --rm --volumes-from 60205766d61a -v /home/itcast/backup/:/backup/ nginx tar zcPf /backup/data.tar.gz /data #驗證操作: $ ls /backup $ zcat /backup/data.tar.gz注釋: -P:使用原文件的原來屬性(屬性不會依據使用者而變),恢復字段到它們的原始方式,忽略現有的用戶權 限屏蔽位(umask)。 加了-p之后,tar進行解壓后,生成的文件的權限,是直接取自tar包里面文件的權限(不會再 使用該用戶的umask值進行運算),那么不加-p參數,將還要再減去umask的值(位運算的減),但是如果使用 root用戶進行操作,加不加-p參數都一樣。
數據還原
數據還原實踐
#命令格式: docker run --rm -itd --volumes-from [數據要到恢復的容器] -v [宿主機備份目錄]:[容器備份目錄] [鏡像名稱] [解壓命令] #命令實踐: #啟動數據卷容器 $ docker start c408f4f14786 #刪除源容器內容: $ docker exec -it vc-test1 bash root@c408f4f14786:/# rm -rf /data/* #恢復數據: docker run --rm --volumes-from v-test -v /home/itcast/backup/:/backup/ nginx tar xPf /backup/data.tar.gz -C /data #驗證: :~$ docker exec -it vc-test1/bin/bash root@c408f4f14786:/# ls /data/data/ v-test1.txt v-test2.txt #新建新的數據卷容器: :~$ docker create -v /newdata --name v-test2 nginx #簡歷新的容器掛載數據卷容器 :~$ docker run --volumes-from a7e9a33f3acb -tid --name vc-test3 nginx /bin/bash #恢復數據: docker run --rm --volumes-from v-test2 -v /home/itcast/backup/:/backup/ nginx tar xPf /backup/data.tar.gz -C /newdata #驗證: :~$ docker exec -it vc-test3 /bin/bash root@c408f4f14786:/# ls /newdata v-test1.txt v-test2.txt注意: 解壓的時候,如果使用目錄的話,一定要在解壓的時候使用 -C 制定掛載的數據卷容器,不然的話容器數據 是無法恢復的,因為容器中默認的backup目錄不是數據卷,即使解壓后,也看不到文件。
數據是最寶貴的資源,docker在設計上考慮到了這點,并且為數據的操作提供了充分的支持
總結
- 上一篇: 容器相关操作
- 下一篇: 后台开发必读书籍--Linux 高性能服