如果有一天不小心執(zhí)行了docker rm $(docker ps -aq)刪除所有container. 那么Mysql里的數(shù)據(jù)也會(huì)被刪掉, 這是不安全的.
我們需要將數(shù)據(jù)持久化, 存儲(chǔ)在container外部. 即使刪除container也不會(huì)刪除原有的數(shù)據(jù).

二、容器的缺陷

容器中的數(shù)據(jù)可以存儲(chǔ)在容器層。但是將數(shù)據(jù)存放在容器層存在以下問(wèn)題:
1.數(shù)據(jù)不是持久化。意思是如果容器刪除了,這些數(shù)據(jù)也就沒(méi)了
2.主機(jī)上的其它進(jìn)程不方便訪問(wèn)這些數(shù)據(jù)
3.對(duì)這些數(shù)據(jù)的I/O會(huì)經(jīng)過(guò)存儲(chǔ)驅(qū)動(dòng),然后到達(dá)主機(jī),引入了一層間接層,因此性能會(huì)有所下降

三、data volume有兩種掛載方式:

1)bind mount(用戶管理):將宿主機(jī)上的某個(gè)目錄或文件(不可以是沒(méi)有格式化的磁盤(pán)文件),掛載到容器中,默認(rèn)在容器內(nèi)對(duì)此目錄是有讀寫(xiě)權(quán)限的,如果只需要向容器內(nèi)添加文件,不希望覆蓋目錄,需要注意源文件必須存在,否則會(huì)被當(dāng)做一個(gè)目錄bind mount給容器。
2)docker manager volume(docker自動(dòng)管理):不需要指定源文件,只需要指定mount point(掛載點(diǎn))。把容器里面的目錄映射到了本地。
這種方式相比bind mount 缺點(diǎn)是無(wú)法限制對(duì)容器里邊目錄或文件的權(quán)限。

使用第二種掛載方式,-v 掛載時(shí),不指定源文件位置,則默認(rèn)掛載的路徑是:

[root@sqm-docker01 _data]# pwd
/var/lib/docker/volumes/dd173640edd5b0205bb02f3c4139647be12528b38289b9f93f18123a6b1266a8/_data
#當(dāng)有目錄掛載時(shí),默認(rèn)在/var/lib/docker/volumes/下會(huì)生成一串hash值,hash值下有一個(gè)_data的目錄,容器內(nèi)映射的文件就在此路徑下。

四、Storage Driver

數(shù)據(jù)存儲(chǔ)方式

Centos7版本的docker,Storage Driver(數(shù)據(jù)存儲(chǔ)方式)為:overlay2 ,Backing Filesystem(文件系統(tǒng)類型): xfs

可使用 “docker inspect 容器名稱” 來(lái)查看數(shù)據(jù)存儲(chǔ)方式

五、Data Volume
(Bind mount)

持久化存儲(chǔ):本質(zhì)上是DockerHost文件系統(tǒng)中的目錄或文件,能夠直接被Mount到容器的文件系統(tǒng)中。在運(yùn)行容器時(shí),可通過(guò)-v實(shí)現(xiàn)。

特點(diǎn):
**1. Data Volume是目錄或文件,不能是沒(méi)有格式化的磁盤(pán)(塊設(shè)備)。

容器可以讀寫(xiě)volume中的數(shù)據(jù)。
Volume數(shù)據(jù)可以永久保存,即使使用它的容器已經(jīng)被銷毀。**

小實(shí)驗(yàn):

運(yùn)行一個(gè)nginx服務(wù),做數(shù)據(jù)持久化

(1)Data Volume是目錄或文件,不能是沒(méi)有格式化的磁盤(pán)(塊設(shè)備)。

[root@docker01 ~]# mkdir html
//創(chuàng)建測(cè)試目錄
[root@docker01 ~]# cd html/
[root@docker01 html]# echo This is a testfile in dockerHost. > index.html
//創(chuàng)建測(cè)試網(wǎng)頁(yè)
[root@docker01 ~]# docker run -itd --name testweb -v /root/html/:/usr/share/nginx/html nginx:latest
//運(yùn)行一個(gè)nginx容器,并掛載目錄
[root@docker01 ~]# docker inspect testweb

[root@docker01 ~]# curl 172.17.0.3

注意:dockerhost上需要被掛載的源文件或目錄,必須是已經(jīng)存在,否則,會(huì)被當(dāng)作一個(gè)目錄掛載到容器中。

(2)容器可以讀寫(xiě)volume中的數(shù)據(jù)。

[root@docker01 ~]# docker exec  -it testweb  /bin/bash
root@ef12d312a94e:/# cd /usr/share/nginx/html/
root@ef12d312a94e:/usr/share/nginx/html# echo update > index.html
//容器中更三五互聯(lián)頁(yè)
root@ef12d312a94e:/usr/share/nginx/html# exit
[root@docker01 ~]# cat html/index.html
//可以看到宿主目錄的掛載目錄也更新了

(3)Volume數(shù)據(jù)可以永久保存,即使,使用它的容器已經(jīng)被銷毀,也可以通過(guò)宿主機(jī)的掛在目錄重新啟動(dòng)一個(gè)容器掛載這個(gè)目錄進(jìn)行訪問(wèn)。

[root@docker01 ~]# docker ps -a -q |xargs docker rm -f
//刪除所有容器

[root@docker01 ~]# cat html/index.html
//容器刪除之后,宿主機(jī)的測(cè)試網(wǎng)頁(yè)也在

[root@docker01 ~]# docker run  -itd --name t1  -P -v  /root/html/:/usr/share/nginx/html nginx:latest
//基于測(cè)試網(wǎng)頁(yè)創(chuàng)建一個(gè)容器
[root@docker01 ~]# docker ps

[root@docker01 ~]# curl 127.0.0.1:32768
//訪問(wèn)一下

[root@docker01 ~]# echo update-new > html/index.html
//再次更新測(cè)試網(wǎng)頁(yè)
[root@docker01 ~]# curl 127.0.0.1:32768
//在宿主機(jī)更新測(cè)試網(wǎng)頁(yè),剛剛創(chuàng)建的容器的測(cè)試網(wǎng)頁(yè)也會(huì)更新

(5)默認(rèn)掛載到容器內(nèi)的文件,容器是有讀寫(xiě)權(quán)限。可以在運(yùn)行容器是-v 后邊加“:ro”限制容器的寫(xiě)入權(quán)限

[root@docker01 ~]# docker run  -itd --name t2 -P  -v  /root/html/:/usr/share/nginx/html:ro  nginx:latest
//創(chuàng)建容器設(shè)置指讀權(quán)限
[root@docker01 ~]# docker exec -it t2 /bin/bash
//進(jìn)入容器
root@4739c0f5d970:/# cd /usr/share/nginx/html
root@4739c0f5d970:/usr/share/nginx/html# echo 1234 > index.html
//修改測(cè)試網(wǎng)頁(yè)(失敗,因?yàn)槭侵蛔x的)

[root@docker01 ~]# echo 654321 > html/index.html 
//宿主機(jī)可以更改
[root@docker01 ~]# curl 127.0.0.1:32768

(6)并且還可以掛載單獨(dú)的文件到容器內(nèi)部,一般他的使用場(chǎng)景是:如果不想對(duì)整個(gè)目錄進(jìn)行覆蓋,而只希望添加某個(gè)文件,就可以使用掛載單個(gè)文件。
<1>測(cè)試1

 [root@docker01 ~]# docker run -itd --name v6 -P -v /root/html/index.html:/usr/share/nginx/html/index.html nginx:latest
[root@docker01 ~]# docker ps

[root@docker01 ~]# curl 127.0.0.1:32770

<1>測(cè)試2

[root@docker01 ~]#  echo test > test.html
[root@docker01 ~]# docker run -itd --name t8 -P -v /root/test.html:/usr/share/nginx/html/test.html nginx:latest

[root@docker01 ~]# curl 127.0.0.1:32772/test.html

六,Docker Manager Volume

會(huì)自動(dòng)在宿主機(jī)生成目錄,所以在掛載目錄的時(shí)候只用寫(xiě)容器中的目錄。
特性和上邊的bind mount基本一樣

[root@docker01 ~]# docker run -itd --name t1 -P  -v /usr/share/nginx/html nginx:latest
[root@docker01 ~]# docker ps

[root@docker01 ~]# docker inspect t1

[root@docker01 _data]# cd /var/lib/docker/volumes/17c50a065a6b10ccd01ca1ce8091fdf6282dc9dcb77a0f6695906257ecc03a63/_data
[root@docker01 _data]# echo this is a testfile > index.html
[root@docker01 _data]# docker ps

[root@docker01 _data]# curl 127.0.0.1:32777

[root@docker01 _data]# docker volume ls

[root@docker01 _data]# docker rm t1 -f
[root@docker01 _data]# cat index.html

1.刪除容器的操作,默認(rèn)不會(huì)對(duì)dockerhost上的源文件操作,如果想要在刪除容器時(shí)把源文件也刪除,可以在刪除容器時(shí)添加-v選項(xiàng)(一般不推薦使用這種方式,因?yàn)槲募锌赡鼙黄渌萜魇褂茫?/p>

[root@docker01 _data]# docker run -itd --name t2 -P  -v /usr/share/nginx/html nginx:latest
[root@docker01 ~]# docker inspect t2

[root@docker01 ~]# cd /var/lib/docker/volumes/2781dbfdc673fc7d149dc4f6217ef277fe72e05ba2e20fcebb617afe97eccb30/_data
[root@docker01 _data]# docker rm -v t2 -f
t2
[root@docker01 _data]# ls

七,容器與容器的數(shù)據(jù)共享

Volume container:給其他容器提供volume存儲(chǔ)卷的容器。并且它可以提供bind mount,也可以提供docker manager volume。

創(chuàng)建一個(gè)vc_data容器

[root@docker01 ~]# docker create --name vc_data  -v ~/html:/usr/share/nginx/html  -v /other/useful/tools busybox
[root@docker01 ~]# docker inspect vc_data

[root@docker01 ~]# docker run -itd --name t3 -P  --volumes-from vc_data nginx:latest
[root@docker01 ~]# docker ps

[root@docker01 ~]# curl 127.0.0.1:32779

八,容器的跨主機(jī)數(shù)據(jù)共享

實(shí)驗(yàn)環(huán)境

docker01 docker02

httpd
nfs

要求:docker01和docker02的主目錄,是一樣的。

準(zhǔn)備工作

[root@localhost ~]# hostnamectl set-hostname nfs
[root@localhost ~]# hostnamectl set-hostname docker01
[root@localhost ~]# hostnamectl set-hostname docker02

nfs操作

[root@localhost ~]# yum -y install nfs-utils
//下載nfs服務(wù)

[root@nfs ~]# mkdir /datashare
//創(chuàng)建共享目錄

[root@nfs ~]# vim /etc/exports
//設(shè)置權(quán)限如下
/datashare *(rw,sync,no_root_squash)

開(kāi)啟各項(xiàng)服務(wù)

[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl enable rpcbind
[root@nfs ~]# systemctl start nfs-server
[root@nfs ~]# systemctl enable nfs-server

docker01和docker02測(cè)試nfs

[root@docker01 htdocs]# showmount -e 192.168.1.20
[root@docker02 htdocs]# showmount -e 192.168.1.20

docker01的操作

[root@docker02 ~]# mkdir /xxx
[root@docker01 ~]# mount  -t nfs 192.168.1.10:/datashare /xxx
//掛載nfs上的共享目錄
[root@docker01 ~]# mount | tail -1
//查看是否掛載

nfs創(chuàng)建測(cè)試文件

[root@nfs ~]# cd datashare/
[root@nfs datashare]# vim index.html
<div id=datetime>
    <script>
        setInterval(document.getElementById(\\\'datetime\\\').innerHTML=new Date().toLocaleString();, 1000);
    </script>
</div>
xgp666

docker01查看一下

docker02的操作與docker01上一樣
這里先不考慮將代碼寫(xiě)入鏡像,先以這種方式,分別在docker01和docker02部署httpd服務(wù)

[root@docker01 ~]# docker run -itd --name bdqn-web1 -P -v /xxx/:/usr/local/apache2/htdocs httpd:latest 
[root@docker02 ~]# docker run -itd --name bdqn-web2 -P -v /xxx/:/usr/local/apache2/htdocs httpd:latest
[root@docker01 ~]# docker ps 
//查看端口
0.0.0.0:32775->80/tcp   bdqn-web
[root@docker02 ~]# docker ps
//查看端口
0.0.0.0:32769->80/tcp   bdqn-web2

此時(shí),用瀏覽器訪問(wèn),兩個(gè)WEB服務(wù)的主界面是一樣。但如果,NFS服務(wù)器上的源文件丟失,
則兩個(gè)web服務(wù)都會(huì)異常。

想辦法將元數(shù)據(jù)寫(xiě)入鏡像內(nèi),在基于鏡像創(chuàng)建一個(gè)vc_data容器,這里因?yàn)闆](méi)有接觸到docker-compose和docker-swarm等docker編排工具,所以需手動(dòng)創(chuàng)建鏡像!

nfs操作

[root@nfs datashare]# echo xgp666 > index.html 
//更改測(cè)試文件

docker02操作

[root@docker02 ~]# cd /xxx/
[root@docker02 xxx]# vim Dockerfile
//編寫(xiě)Dockerfile
[root@docker02 xxx]# cat Dockerfile 
FROM busybox
ADD index.html /usr/local/apache2/htdocs/index.html
VOLUME /usr/local/apache2/htdocs

創(chuàng)建鏡像并運(yùn)行一個(gè)容器

[root@docker02 xxx]# docker build -t back_data .
//基于Dockerfile創(chuàng)建鏡像
[root@docker02 xxx]# docker create --name back_container1  back_data:latest 
//基于剛剛創(chuàng)建的鏡像創(chuàng)建容器

運(yùn)行容器,并導(dǎo)出鏡像

[root@docker02 xxx]# docker run -itd --name bdqn-web3 -P  --volumes-from  back_container1 httpd:latest 
//運(yùn)行一臺(tái)容器
[root@docker02 xxx]# docker save > back_data.tar back_data:latest
//導(dǎo)出鏡像,因?yàn)槭窃诠蚕砟夸浰詃ocker01也可以看到

docker01

[root@docker01 xxx]# docker load -i back_data.tar 
//去共享目錄,導(dǎo)入鏡像
[root@docker01 xxx]# docker  create --name back_container2  back_data:latest
//基于剛剛創(chuàng)建的鏡像運(yùn)行容器
[root@docker01 xxx]# docker run  -itd --name bdqn-web4 -P  --volumes-from  back_container2 httpd:latest
//運(yùn)行一臺(tái)容器

瀏覽器訪問(wèn)

[root@docker01 ~]# docker ps 
//查看端口
 0.0.0.0:32776->80/tcp   bdqn-web4
[root@docker02 ~]# docker ps
//查看端口
0.0.0.0:32770->80/tcp   bdqn-web3

更多關(guān)于云服務(wù)器域名注冊(cè),虛擬主機(jī)的問(wèn)題,請(qǐng)?jiān)L問(wèn)三五互聯(lián)官網(wǎng):m.shinetop.cn

贊(0)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享網(wǎng)絡(luò)內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。郵箱:3140448839@qq.com。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明出處:三五互聯(lián)知識(shí)庫(kù) » Docker數(shù)據(jù)持久化和容器與容器的數(shù)據(jù)共享

登錄

找回密碼

注冊(cè)

主站蜘蛛池模板: 亚洲第一国产综合| 国产女人18毛片水真多1| 国产美女被遭强高潮免费一视频| 欧美黑人乱大交| 国产成人综合网亚洲第一| 中国少妇人妻xxxxx| 人妻系列中文字幕精品| 另类专区一区二区三区| 放荡的少妇2欧美版| 色综合激情丁香七月色综合 | 亚洲国产一区二区三区四| 伊人久久大香线蕉av五月天| 国产日女人视频在线观看| 吉林省| 国产精品区一区第一页| 欧美一本大道香蕉综合视频| 国产成人一区二区三区视频免费| 日韩乱码人妻无码系列中文字幕| 色伦专区97中文字幕| a级免费视频| 亚洲色欲在线播放一区二区三区 | 国产乱码1卡二卡3卡四卡5| 粗大挺进朋友人妻淑娟| 久久精品国产熟女亚洲av| 国产在线观看播放av| 99亚洲男女激情在线观看| 亚洲一级片一区二区三区| 免费无码又爽又刺激高潮虎虎视频 | 国产美女久久久亚洲综合| 长武县| 嗯灬啊灬把腿张开灬动态图| 久久婷婷综合色丁香五月| 少妇久久久被弄到高潮| 国产精品SM捆绑调教视频| 久久久无码人妻精品无码| 日韩精品卡1卡2日韩在线| 好紧好滑好湿好爽免费视频| 夜鲁鲁鲁夜夜综合视频| 午夜色大片在线观看免费| 国产一区二区三区黄色片| 国产中年熟女高潮大集合|