在docker中,volume的意思是“數(shù)據(jù)卷”,可以繞過默認(rèn)的聯(lián)合文件系統(tǒng),以正常的文件或者目錄的形式存在于宿主機上,進而實現(xiàn)保存持久化數(shù)據(jù)以及共享容器間的數(shù)據(jù)。
本教程操作環(huán)境:linux7.3系統(tǒng)、docker-1.13.1版、Dell G3電腦。
docker中volume是什么意思
Docker Volume,通常翻譯為數(shù)據(jù)卷,用于保存持久化數(shù)據(jù)。當(dāng)我們將數(shù)據(jù)庫例如mysql運行在Docker容器中時,一般將數(shù)據(jù)通過Docker Volume保存在主機上,這樣即使刪除MySQL容器,數(shù)據(jù)依然保存在主機上,有效保證了數(shù)據(jù)的安全性。
1. 指定Docker Volume
使用docker run命令,可以運行一個Docker容器
docker?run?-itd?--volume?/tmp/data1:/tmp/data2?--name?test?ubuntu?bash
-
基于ubuntu鏡像創(chuàng)建了一個Docker容器。
-
容器的名稱為test,由–name選項指定。
-
Docker Volume由–volume選項指定,主機的/tmp/data1目錄與容器中的/tmp/data2目錄一一對應(yīng)。
2. 查看Docker Volume
使用docker inspect命令,可以查看Docker容器的詳細(xì)信息:
docker?inspect?--format=?'{{json?.Mounts}}'?test?|?python?-m?json.tool [ { "Destination":?"/tmp/data2", "Mode":?"", "Propagation":?"", "RW":?true, "Source":?"/tmp/data1", "Type":?"bind" } ]
-
使用–format選項,可以選擇性查看需要的容器信息。.Mount為容器的Docker Volume信息。
-
python -m json.tool可以將輸出的json字符串格式化顯示。
-
Source表示主機上的目錄,即/tmp/data1。
-
Destination為容器中的目錄,即/tmp/data2。
3. 本機文件可以同步到容器
在本機/tmp/data1目錄中新建hello.txt文件
touch?/tmp/data1/hello.txt ls?/tmp/data1/ hello.txt
hello.txt文件在容器/tmp/data2/目錄中可見
使用docker exec命令,可以在容器中執(zhí)行命令。
docker?exec?test?ls?/tmp/data2/ hello.txt
可知,在本機目錄/tmp/data1/的修改,可以同步到容器目錄/tmp/data2/中。
4. 容器文件可以同步到主機
在容器/tmp/data2目錄中新建world.txt文件
docker?exec?test?touch?/tmp/data2/world.txt docker?exec?test?ls?/tmp/data2/ hello.txt world.txt
world.txt文件在主機/tmp/data1/目錄中可見
ls?/tmp/data1/ hello.txt?world.txt
可知,在容器目錄/tmp/data2/的修改,可以同步到主機目錄/tmp/data1/中。
5. 結(jié)論
Docker Volume本質(zhì)上是容器與主機之間共享的目錄或者文件,這樣Docker Volume中的數(shù)據(jù)可以在主機和容器中實時同步。使用Virtualbox創(chuàng)建虛擬機時,也可以配置共享目錄,這與Docker Volume非常相似。
推薦學(xué)習(xí):《docker視頻教程》