目錄docker
在容器技術介紹篇,咱們提到過容器的難點在構建網絡和文件存儲。容器的文件系統雖然能夠保存數據,可是容器中的,容器自己是不可遷移的,只能導出其中的文件系統,可是導出文件系統不是遷移容器的最佳實踐,最佳實踐是鏡像。可是鏡像是靜態數據。改變容器文件系統的東西是不會影響到鏡像的。因此就有了掛在volume實踐。在build應用鏡像的時候,就經過VOLUME給容器建立掛載點,能夠掛在宿主機的卷或者其它容器的卷。至此,咱們知道了爲何要有volume,由於要持久化容器產生的數據。那本文將說明docker volume是什麼,怎麼使用掛載,容器間共享同步,遷移備份還原數據。ubuntu
docker volume是docker容器對應使用的外界存儲。bash
要實現這個,不是經過每一個容器都掛載相同的物理數據券來實現,而是經過第一個容器掛載數據券後。後面的容器在docker run時,指定一個--volumes-from 第一個dockerid,這樣新建的容器就會同第一個容器同樣,有相同掛載點對應數據卷。咱們一般稱第一個容器是「數據卷容器」網絡
應用產生的數據是很是重要的,數據持久化到數據卷後,持久化數據的備份和遷移還原也是數據卷使用的重要操做。性能
備份volume
備份一個容器的volume,經過啓動一個新容器,共享要備份的目標容器,在新容器新掛在備份的目錄在新容器的另外一個掛載點;因爲新容器同時共享了目標容器的volume,因此在新容器中執行tar 共享掛載點數據 放到新掛載點,同時啓動新容器時指定--rm,這樣就能夠在新容器的新掛載點對應的數據卷中找到備份的數據了。
命令以下:已經知道存在docker容器docker1 其有一個數據卷要備份時/data
docker run -it --volumes-from docker1 -v /tmp/backup/:/backup --name docker_bk --rm ubuntu tar cvf /backup/docker1.tar /data
執行成功的話,會炸/tmp/backup/下看到docker1.tar
這種方式是最專業和正確的操做。ui
還原volume
恢復基本原理同樣,也是將新容器啓動後,做爲數據卷容器,而後再啓動第二個容器,掛載備份數目錄,並--volumes-from 第一個容器,執行tar xvf 數據到第一個容器的卷中。同步
docker run -it --name docker_recover -v test_vol:/data ubuntu /bin/bash
docker run --rm --volumes-from docker_recover -v /tmp/backup/:/backup ubuntu tar xvf /backup/docker1.tar -C /datadockerfile