要知道容器是有生命周期的。
docker默認(rèn)的存儲(chǔ)方式:存儲(chǔ)類型:(strage driver:overlay2.xfs)
成都創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、烏審網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5響應(yīng)式網(wǎng)站、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為烏審等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
1)bind mount(用戶管理):將宿主機(jī)上的某個(gè)目錄或文件(不可以是沒有格式化的磁盤文件),掛載到容器中,默認(rèn)在容器內(nèi)對(duì)此目錄是有讀寫權(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)是無法限制對(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)映射的文件就在此路徑下。
首先創(chuàng)建一個(gè)volume container:
volume contianer的優(yōu)點(diǎn):
與bind mount相比,不必為每一容器指定源文件路徑,所有路徑都在volume container中定義好,容器只需與volume container關(guān)聯(lián),從而實(shí)現(xiàn)容器與host的解耦。
(1)創(chuàng)建volume container:
首先我在本地創(chuàng)建容器需要掛載的web網(wǎng)頁目錄:
[root@sqm-docker01 ~]# mkdir html
[root@sqm-docker01 ~]# echo "hello volume_data" > html/index.html
#我直接使用了兩種掛載方式(基于busybox鏡像來創(chuàng)建):
[root@sqm-docker01 ~]# docker create --name vc_data01 -v /root/html/:/usr/share/nginx/html -v /other/useful/tools/ busybox
注意:該vcdata01也為一個(gè)容器,但它的狀態(tài)是create。
(3)基于volume container運(yùn)行nginx容器:
[root@sqm-docker01 ~]# docker run -d --name test1 -p 80:80 --volumes-from vc_data01 nginx:latest
(4)訪問nginx的默認(rèn)網(wǎng)頁:
查看映射到本地默認(rèn)路徑,會(huì)生成兩個(gè)hash值,代表掛載了兩個(gè)host path。
環(huán)境:兩臺(tái)dockerhost(centos7)
docker01:172.16.1.30
docker02:172.16.1.31
nfs服務(wù)器:172.16.1.40
nfs server:
[root@nfs-server ~]# yum -y install nfs-utils #安裝nfs服務(wù)
[root@nfs-server ~]# yum -y install rpcbind #遠(yuǎn)程傳輸控制協(xié)議
[root@nfs-server ~]# vim /etc/exports
參數(shù)解釋:
*:表示所有地址,也可以自定義ip地址,或者網(wǎng)段
rw:可讀可寫
sync:同步數(shù)據(jù)到磁盤
no_root_squash:加上這個(gè)選項(xiàng)后,root用戶就會(huì)對(duì)共享的目錄擁有至高的權(quán)限控制,就像是對(duì)本機(jī)的目錄操作一樣。
[root@nfs-server ~]# mkdir /nfs #創(chuàng)建共享目錄
[root@nfs-server ~]# systemctl start rpcbind #先啟動(dòng)該服務(wù)
[root@nfs-server ~]# systemctl start nfs
docker01和dcoker02測(cè)試是否能夠掛載:
docker01:
將本地目錄掛載到nfs服務(wù)器上:
創(chuàng)建網(wǎng)頁目錄:
[root@sqm-docker01 ~]# mkdir html
[root@sqm-docker01 ~]# vim /etc/fstab ##進(jìn)入配置文件進(jìn)行掛載
[root@sqm-docker01 ~]# mount -a #重新加載使其生效
[root@sqm-docker01 ~]# df -hT #查看磁盤信息
編寫網(wǎng)頁內(nèi)容:
[root@sqm-docker01 ~]# echo "hello docker02" > html/index.html
[root@sqm-docker01 ~]# cat html/index.html
hello docker02
運(yùn)行nginx容器:
[root@sqm-docker01 ~]# docker run -d --name nginx01 -p 80:80 -v /root/html/:/usr/share/nginx/html nginx:latest
docker02:
掛載nfs:
[root@sqm-docker02 ~]# mkdir html #創(chuàng)建掛載目錄
[root@sqm-docker02 ~]# vim /etc/fstab
[root@sqm-docker02 ~]# mount -a #重新加載使其生效
//查看目錄文件是否同步:
[root@sqm-docker02 ~]# cat html/index.html
hello docker02
//運(yùn)行nginx容器:
[root@sqm-docker02 ~]# docker run -d --name nginx02 -p 80:80 -v /root/html/:/usr/share/nginx/html nginx
訪問nginx頁面:
我們?cè)赿ocker01上修改nginx頁面,測(cè)試docker02nginx頁面是否同步:
[root@sqm-docker01 ~]# echo "123456" > html/index.html
nginx02再次訪問:
[root@sqm-docker02 ~]# curl 127.0.0.1
123456
環(huán)境:兩臺(tái)dockerhost主機(jī)(centos7)
docker01:172.16.1.30
docker02:172.16.1.31
(1)docker01上創(chuàng)建目錄文件:
[root@sqm-docker01 ~]# mkdir html
[root@sqm-docker01 ~]# echo "hello docker02" > html/index.html
(2)編寫Dockerfile:
[root@sqm-docker01 ~]# vim Dockerfile
//構(gòu)建dockerfile:
[root@sqm-docker01 ~]# docker build -t data:latest . #鏡像名稱自定義
(3)創(chuàng)建volume container并基于運(yùn)行nginx容器:
[root@sqm-docker01 ~]# docker create --name vc_data02 data:latest
[root@sqm-docker01 ~]# docker run -d --name box1 -P --volumes-from vc_data02 nginx
訪問nginx網(wǎng)頁:
[root@sqm-docker01 ~]# curl 127.0.0.1:32768
hello docker02
(4)將volume container鏡像打包,并拷貝給docker02:
[root@sqm-docker01 ~]# docker save --output data.tar data:latest
[root@sqm-docker01 ~]# scp data.tar root@172.16.1.31:/root/
docker02:
//導(dǎo)入鏡像
[root@sqm-docker02 ~]# docker load --input data.tar
//創(chuàng)建volume container:
[root@sqm-docker02 ~]# docker create --name vc_data03 data:latest
//基于container運(yùn)行nginx:
[root@sqm-docker02 ~]# docker run -d --name box2 -P --volumes-from vc_data03 nginx:latest
最后訪問nginx默認(rèn)界面(確保與docker01上的nginx頁面相同)
[root@sqm-docker02 ~]# curl 127.0.0.1:32768
hello docker02
以上就是跨主機(jī)實(shí)現(xiàn)數(shù)據(jù)共享的多種方法,當(dāng)然還有其他的方法,可能會(huì)在后續(xù)的博客中會(huì)寫到。
———————— 本文至此結(jié)束,感謝閱讀 ————————