1.9-docker數據管理

Docker 數據管理



容器的空間,只是使用宿主機硬盤的一部分,一般很小。在容器中產生的數據,除非導出成鏡像,否則停止或者刪除容器,原來產生的數據也隨之丟失。可以把宿主機的一個目錄,掛載到容器中,產生的數據都寫入這個目錄,這樣避免了數據的丟失。


1. 掛載本地的目錄到容器裏

docker run -tid -v /data/:/data wyp bash //-v 用來指定掛載目錄,:前面的/data/爲本地目錄,:後面的/data/爲容器裏的目錄,容器如果不存在/data目錄,會自動創建。

然後在容器中df -h來驗證,是否掛載成功。


2. 掛載數據卷

其實我們掛載目錄的時候,可以指定容器name,如果不指定就隨機定義了。比如上面我們沒有指定,它就生成了一個名字爲loving_kowalevski,這個名字可以使用命令 docker ps  看最右側一列

docker run -itd --volumes-from loving_kowalevski centos bash

這樣,我們使用centos鏡像創建了新的容器,並且使用了 loving_kowalevski  容器的數據卷


說明:如果我們開啓了10個容器,提供了web服務,且10個站點是負載均衡。宿主機的/data目錄,都是掛載到容器的/data目錄下,我們需要輸入10次命令docker run -tid -v /data/:/data centos bash來實現,現在有了掛載數據卷功能,我們輸入10次docker run -itd --volumes-from loving_kowalevski centos bash,其他9臺會複製容器名字爲loving_kowalevski的掛載內容,它改變掛載路徑,其他9臺也隨之改變,且實了數據共享很方便。



3. 定義數據卷容器

有時候,我們需要多個容器之間相互共享數據,類似於linux裏面的NFS,所以就可以搭建一個專門的數據卷容器,然後其他容器直接掛載該數據卷。

首先建立數據卷容器,只是爲了給其他容器共享數據用的目錄。

docker run -itd -v /data/ --name testvol centos  bash  //注意這裏的/data/是容器的/data目錄,並非本地的/data/目錄,裏面是空的。容器名稱可以自定義。然後進入該容器

docker exec -it testvol bash   #既可以寫ID,也可以寫名稱。進入後可以看到data目錄是空的。exit退出,然後讓其他容器掛載該數據卷

docker run -itd --volumes-from testvol centos bash

然後進入第二個容器,可以df -h看到也有一個/data目錄,也是空的,寫入數據,容器1也同步了數據。

docker run -itd  --volumes-from testvol --name=web2 centos bash 在開啓一個容器,名稱爲web2

然後進入第三臺名爲web2的容器,一樣可以看到/data目錄的數據共享。

對於第一臺容器,他的/data是總的共享目錄,所以一定要保護好,不要隨便停止,刪除。



Docker 數據卷的備份與恢復

備份

mkdir /vol_data_backup

docker run --volumes-from testvol -v /vol_data_backup/:/backup/centos tar cvf /backup/data.tar /data/

進入新的容器,然後打包容器1的共享目錄到backup下。

說明:首先我們需要使用testvol數據卷新開一個容器,同時我們還需要把本地的/vol_data_backup/目錄掛載到該容器的/backup下,這樣在容器中/backup目錄裏面新建的文件,我們就可以直接在/vol_data_backup/目錄中看到了。 然後再把/data/目錄下面的文件打包到成data.tar文件放到/backup目錄下面。


恢復

思路: 先新建一個數據卷容器,再建一個新的容器並掛載該數據卷容器,然後再把tar包解包。

新建數據卷容器1:

docker run -itd -v /data/ --name testvol2 centos bash

掛載數據卷新建容器,並解包:

docker run --volumes-from testvol2 -v /vol_data_backup/:/backup centos tar xvf /backup/data.tar

解壓後,文件爲/data目錄和文件,所以我們需要在/下解壓,文件自動覆蓋到/data目錄下。


說明:tar xvf /backup/data.tar是一條命令,可以直接跟在docker run ...後面,執行後退出。如同我們之前執行的 /bin/bash一樣的道理。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章