溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

docker中如何管理容器數(shù)據(jù)

發(fā)布時間:2021-11-19 11:17:21 來源:億速云 閱讀:146 作者:小新 欄目:云計算

這篇文章給大家分享的是有關(guān)docker中如何管理容器數(shù)據(jù)的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

主要有兩種方法來管理docker數(shù)據(jù)。

Data volumes, and

Data volume containers.

數(shù)據(jù)卷的作用:

Data volumes

A data volume is a specially-designated directory within one or more containers that bypasses the Union File System to provide several useful features for persistent or shared data(在一個或多個容器中一個特別指定的目錄,通過繞過聯(lián)合文件系統(tǒng)提供多個有用的特性用于儲存或共享數(shù)據(jù)):

Data volumes can be shared and reused between containers(可分享,可重用)

Changes to a data volume are made directly(直接的更改)

Changes to a data volume will not be included when you update an image(當你更新鏡像時,對volume的更改不會被包含其中)

Volumes persist until no containers use them(保存至容器不再使用它)

實質(zhì):不就是一個目錄嘛

實踐:

使用-v在容器內(nèi)增加一個數(shù)據(jù)卷(即/webapp目錄):

docker run -d -P --name web -v /webapp training/webapp python app.py

進入容器查看(需要先安裝nsenter,這里我用了腳本):

root@docker:~# accessdock
Please input the specific container's name:web
root@831a05306ec7:/# ls
bin   dev  home  lib64  mnt  proc  run   selinux  sys  usr  webapp
boot  etc  lib   media  opt  root  sbin  srv      tmp  var
root@831a05306ec7:/#

可以看到在容器根目錄下多了一個webapp文件夾。

關(guān)于在dockerfile中的用法(使用VOLUME)標識:

You can also use the VOLUME instruction in a Dockerfile to add one or more new volumes to any container created from that image.

使用-v掛載本地目錄到容器內(nèi)作為數(shù)據(jù)卷(如果該目錄不在,docker會自動創(chuàng)建):

PS:在我的試驗中,官方手冊中這個命令會導(dǎo)致容器自己退出,把"/opt"更改為其他目錄就不會出問題了:

docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

看看效果:

root@docker:~# docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py           #":"前的是本地目錄,":"后的是容器內(nèi)目錄
a1c6d9d20eb47a77e526d8b6f8af2926a253afd9112ec32480b5c060fceceff7
root@docker:~# cd /src/webapp/
root@docker:/src/webapp# ls
root@docker:/src/webapp#

我的宿主機本來沒有/src/webapp目錄,但是docker自動創(chuàng)建了它。

先進入容器看看:

root@docker:~# accessdock 
Please input the specific container's name:web
root@7d201fd35578:/# ls
bin   dev  home  lib64  mnt  proc  run   selinux  sys  usr  webapp
boot  etc  lib   media  opt  root  sbin  srv      tmp  var
root@7d201fd35578:/# cd webapp/
root@7d201fd35578:/webapp# touch hellp
root@7d201fd35578:/webapp# ls
hellp
root@7d201fd35578:/webapp# exit
logout
root@docker:~# cd /src/webapp/
root@docker:/src/webapp# ls
hellp

通過這樣的試驗,可以了解到數(shù)據(jù)卷的共享特性。在容器內(nèi)的數(shù)據(jù)卷創(chuàng)建文件,宿主機上也會看到。

默認情況下,容器對這個目錄是可讀可寫的。如果你想讓容器對/src/webapp只有讀屬性,使用以下命令:

docker run -d -P --name web -v /src/webapp:/webapp:ro training/webapp python app.py

在容器目錄后加上一個":ro"即可。

當我想從容器刪除hellp文件時,提示只能讀:

root@08fae41a534b:/webapp# rm hellp
rm: cannot remove `hellp': Read-only file system

在容器之間共享數(shù)據(jù)卷:

在某些情況下,需要為多個容器提供共享數(shù)據(jù),你可以啟動一個數(shù)據(jù)卷容器并把數(shù)據(jù)掛載到此。這樣一來,其他連接到此數(shù)據(jù)卷容器的容器都可以訪問那些被掛載的數(shù)據(jù)。在這里,我先啟動一個數(shù)據(jù)卷容器并把主機的/var/data掛載上去。再啟動其他容器,使他們能訪問數(shù)據(jù)卷容器的共享數(shù)據(jù)卷。

啟動數(shù)據(jù)卷容器:

docker run -d -p 1000:5000 -v /var/data:/data --name data1 training/webapp python app.py

啟動一個附加容器:

docker run -d -p 2000:5000 --volumes-from data1 --name data2 training/webapp python app.py

這里我們使用了--volumes-from標識(指定數(shù)據(jù)卷容器),把它和data1連接起來,因此,在data2中也會有相同的/data目錄。

進行驗證:

root@docker:/var/data# mkdir test
root@docker:/var/data# touch test/hello
root@docker:/var/data# ls                                             #在數(shù)據(jù)卷中創(chuàng)建點東西
abc  test
root@docker:/var/data# ls test/
hello
root@docker:/var/data# accessdock
Please input the specific container's name:data1
root@9795da386459:/# cd /data
root@9795da386459:/data# ls
abc  test
root@9795da386459:/data# cd test/
root@9795da386459:/data/test# ls                                      #在data1上也能訪問
hello
root@9795da386459:/data/test# 
root@9795da386459:/data/test# exit
logout
root@docker:/var/data# accessdock
Please input the specific container's name:data2
root@2b383ccacd05:/# cd data/
root@2b383ccacd05:/data# ls
abc  test
root@2b383ccacd05:/data# cd test/
root@2b383ccacd05:/data/test# ls                                      #在data2上也能訪問
hello

當你刪除掛載卷的data1容器,包括初始化數(shù)據(jù)化容器,或者隨后的容器,該卷將不會被刪除,直到?jīng)]有容器使用該卷。這允許你升級,或者把有效的數(shù)據(jù)卷在容器之間遷移。

思考:我嘗試把可執(zhí)行文件放到共享數(shù)據(jù)卷中,設(shè)置了read-only。但是依然能在容器中執(zhí)行該文件??峙逻@在生產(chǎn)環(huán)境中是個問題可能出現(xiàn)的地方,必須采取限制訪問等方式,即使容器的操作對主機構(gòu)成威脅,也可以保護主機不受影響。這個問題必須得到重視。

感謝各位的閱讀!關(guān)于“docker中如何管理容器數(shù)據(jù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI