這篇“Docker數(shù)據(jù)卷操作如何實現(xiàn)”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Docker數(shù)據(jù)卷操作如何實現(xiàn)”文章吧。
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比福鼎網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式福鼎網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋福鼎地區(qū)。費用合理售后完善,十年實體公司更值得信賴。
數(shù)據(jù)卷入門
在前面的案例中,如果我們需要將數(shù)據(jù)從宿主機拷貝到容器中,一般都是使用 docker 的拷貝命令,這樣性能還是稍微有點差,沒有辦法能夠達到讓這種拷貝達到本地磁盤 i/o 性能呢?有!
數(shù)據(jù)卷可以繞過拷貝系統(tǒng),在多個容器之間、容器和宿主機之間共享目錄或者文件,數(shù)據(jù)卷繞過了拷貝系統(tǒng),可以達到本地磁盤 i/o 性能。
以前面使用的 nginx 鏡像為例,在運行該容器時,可以指定一個數(shù)據(jù)卷,命令如下:
docker run -itd --name nginx -v /usr/share/nginx/html/ -p 80:80 bc26f1ed35cf
運行效果如下:
此時,我們創(chuàng)建了一個數(shù)據(jù)卷并且掛載到容器的 /usr/share/nginx/html/
目錄下,小伙伴們知道,該目錄實際上是 nginx 保存 html 目錄,在這里掛載數(shù)據(jù)卷,一會我們只需要修改本地的映射位置,就能實現(xiàn)頁面的修改了。
接下來使用 docker inspect 命令查看剛剛創(chuàng)建的容器的具體情況,找到數(shù)據(jù)卷映射目錄,如下:
可以看到,docker默認將宿主機的 /var/lib/docker/volumes/0746bdcfc045b237a6fe2288a3af9d7b80136cacb3e965db65a212627e217d75/_data
目錄作為source目錄,接下來,進入到該目錄中,如下:
此時發(fā)現(xiàn)該目錄下的文件內(nèi)容與容器中 /usr/share/nginx/html/
目錄下的文件內(nèi)容一致,這是因為掛載一個空的數(shù)據(jù)卷到容器中的一個非空目錄中,那么這個目錄下的文件會被復(fù)制到數(shù)據(jù)卷中(如果掛載一個非空的數(shù)據(jù)卷到容器中的一個目錄中,那么容器中的目錄中會顯示數(shù)據(jù)卷中的數(shù)據(jù)。如果原來容器中的目錄中有數(shù)據(jù),那么這些原始數(shù)據(jù)會被隱藏掉)。
小貼士:
由于 mac 中的 docker 有點特殊,上文提到的 /var/lib/xxxx 目錄,如果是在 linux 環(huán)境下,則直接進入即可,如果是在 mac 中,需要首先執(zhí)行如下命令,在新進入的命令行中進入到 /var/lib/xxx 目錄下:
screen ~/library/containers/com.docker.docker/data/vms/0/tty
接下來修改改文件中的index.html文件內(nèi)容,如下:
echo "hello volumes">index.html
修改完成后,再回到瀏覽器中,輸入 http://localhost查看nginx中index.html 頁面中的數(shù)據(jù),發(fā)現(xiàn)已經(jīng)發(fā)生改變。說明宿主機中的文件共享到容器中去了。
結(jié)合宿主機目錄
上文中對于數(shù)據(jù)卷的用法還不是最佳方案,一般來說,我們可能需要明確指定將宿主機中的一個目錄掛載到容器中,這種指定方式如下:
docker run -itd --name nginx -v /users/sang/blog/docker/docker/:/usr/share/nginx/html/ -p 80:80 bc26f1ed35cf
這樣便是將宿主機中的 /users/sang/blog/docker/docker/
目錄掛載到容器的 /usr/share/nginx/html/
目錄下。接下來讀者只需要在 /users/sang/blog/docker/docker/
目錄下添加 html 文件,或者修改 html 文件,都能在 nginx 訪問中立馬看到效果。
這種用法對于開發(fā)測試非常方便,不用重新部署,重啟容器等。
注意:宿主機地址是一個絕對路徑
更多操作
dockerfile中的數(shù)據(jù)卷
如果開發(fā)者使用了 dockerfile 去構(gòu)建鏡像,也可以在構(gòu)建鏡像時聲明數(shù)據(jù)卷,例如下面這樣:
from nginx add https://www.baidu.com/img/bd_logo1.png /usr/share/nginx/html/ run echo "hello docker volume!">/usr/share/nginx/html/index.html volume /usr/share/nginx/html/
這樣就配置了一個匿名數(shù)據(jù)卷,運行過程中,將數(shù)據(jù)寫入到 /usr/share/nginx/html/
目錄中,就可以實現(xiàn)容器存儲層的無狀態(tài)變化。
查看所有數(shù)據(jù)卷
使用如下命令可以查看所有數(shù)據(jù)卷:
docker volume ls
如圖:
查看數(shù)據(jù)卷詳情
根據(jù) volume name 可以查看數(shù)據(jù)詳情,如下:
docker volume inspect
執(zhí)行結(jié)果如下圖:
刪除數(shù)據(jù)卷
可以使用 docker volume rm
命令刪除一個數(shù)據(jù)卷,也可以使用 docker volume prune
批量刪除數(shù)據(jù)卷,如下:
批量刪除時,未能刪除掉所有的數(shù)據(jù)卷,還剩一個,這是因為該數(shù)據(jù)卷還在使用中,將相關(guān)的容器停止并移除,再次刪除數(shù)據(jù)卷就可以成功刪除了,如圖:
數(shù)據(jù)卷容器
數(shù)據(jù)卷容器是一個專門用來掛載數(shù)據(jù)卷的容器,該容器主要是供其他容器引用和使用。所謂的數(shù)據(jù)卷容器,實際上就是一個普通的容器,舉例如下:
創(chuàng)建數(shù)據(jù)卷容器
使用如下方式創(chuàng)建數(shù)據(jù)卷容器:
docker run -itd -v /usr/share/nginx/html/ --name mydata ubuntu
命令執(zhí)行效果如下圖:
引用容器
使用如下命令引用數(shù)據(jù)卷容器:
docker run -itd --volumes-from mydata -p 80:80 --name nginx1 nginx docker run -itd --volumes-from mydata -p 81:80 --name nginx2 nginx
此時, nginx1 和 nginx2 都掛載了同一個數(shù)據(jù)卷到 /usr/share/nginx/html/
目錄下,三個容器中,任意一個修改了該目錄下的文件,其他兩個都能看到變化。
此時,使用 docker inspect
命令查看容器的詳情,發(fā)現(xiàn)三個容器關(guān)于數(shù)據(jù)卷的描述都是一致的,如下圖:
以上就是關(guān)于“Docker數(shù)據(jù)卷操作如何實現(xiàn)”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。