19-数据持久化-Bind Mounting
19-數(shù)據(jù)持久化-Bind Mounting
Bind Mounting 與 Data Volume區(qū)別
Data Volume 需要在 Dockerfile 內(nèi)聲明需要?jiǎng)?chuàng)建的 volume 目錄。
Bind Mounting 則不需要在 Dockerfile 聲明 volume,只需要在創(chuàng)建容器的時(shí)候,也就是 run 的時(shí)候聲明即可。
如:
docker run -v /home/aaa:/root/aaa demo上一節(jié)中 -v 參數(shù)是 mysql:/var/lib/mysql,冒號(hào) “:” 左邊是對(duì) /var/lib/mysql 這個(gè)目錄產(chǎn)生的volume起一個(gè)別名。
而在 Bind Mounting 中,-v 參數(shù)冒號(hào) “:” 左邊是本地的目錄路徑,右邊是創(chuàng)建容器內(nèi)的路徑,做一個(gè)映射。
Bind Mounting
通過(guò) Bind Mounting 創(chuàng)建的 volume,在我們修改本地的目錄時(shí),容器內(nèi)對(duì)應(yīng)的目錄也會(huì)跟著修改,因?yàn)槭峭粋€(gè)volume。
接下來(lái)我們通過(guò)一個(gè)實(shí)驗(yàn)來(lái)查看。
創(chuàng)建一個(gè)docker-nginx文件夾,并進(jìn)入
mkdir docker-nginx cd docker-nginx創(chuàng)建Dockerfiile和index.html兩個(gè)文件
touch Dockerfile index.html修改Dockerfile文件如下:
FROM nginx:latestWORKDIR /usr/share/nginx/htmlCOPY index.html index.html修改index.html文件如下:
<html> <body><h1>Bind Mounting</h1><p>This is a demo.</p></body> </html>創(chuàng)建鏡像
docker build -t vincent/my-nginx .創(chuàng)建容器
docker run -d -p 80:80 --name web vincent/my-nginx查看運(yùn)行狀態(tài)
[vagrant@10 docker-nginx]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 190b2e296c54 vincent/my-nginx "nginx -g 'daemon of…" 2 seconds ago Up 1 second 0.0.0.0:80->80/tcp web可以看到web容器是up的。
訪問(wèn)本機(jī)80端口獲取web容器的內(nèi)容
[vagrant@10 docker-nginx]$ curl 127.0.0.1 <html> <body><h1>Bind Mounting</h1><p>This is a demo.</p></body> </html>curl使用http協(xié)議的時(shí)候默認(rèn)是80端口,https默認(rèn)是443,我們是可以不需要加端口號(hào)的。
我們也可以在筆記本中去訪問(wèn)這臺(tái)虛擬機(jī)的80端口服務(wù)
vincent@dell-Inspiron-7559$: curl http://192.168.2.32 <html> <body><h1>Bind Mounting</h1><p>This is a demo.</p></body> </html>也可以通過(guò)瀏覽器訪問(wèn)查看,ip首先要在虛擬機(jī)內(nèi)通過(guò)ip a獲取。
重新創(chuàng)建web容器并指定volume
刪除web容器
docker rm -f web這條命令會(huì)強(qiáng)制刪除一個(gè)正在運(yùn)行的容器,不推薦使用。
重新創(chuàng)建容器,并指定掛載 /home/vagrant/docker-nginx/ 目錄。
docker run -d -p 80:80 -v /home/vagrant/docker-nginx/:/usr/share/nginx/html --name web vincent/my-nginx查看被掛載的目錄在容器內(nèi)情況
進(jìn)入web容器
docker exec -it web /bin/bash查看 /usr/share/nginx/html 目錄下有哪些內(nèi)容
root@cb7e310d02fd:/usr/share/nginx/html# ls /usr/share/nginx/html Dockerfile index.html我們發(fā)現(xiàn)在 /home/vagrant/docker-nginx/ 文件夾內(nèi)的Dockerfile文件被映射進(jìn)來(lái)了。
那我們?cè)?/usr/share/nginx/html 文件夾內(nèi)創(chuàng)建一個(gè) test.txt 文件,看看是否在 外部也能看到
touch test.txt創(chuàng)建好之后退出web容器,進(jìn)入/home/vagrant/docker-nginx/目錄下查看
exit [vagrant@10 docker-nginx]$ ls Dockerfile index.html test.txt我們發(fā)現(xiàn)同樣被映射到了外面 docker-nginx 目錄下。同樣我們可以測(cè)試在容器內(nèi)修改 test.txt 文件看看里外是否同步。
進(jìn)入web容器
docker exec -it web /bin/bash修改test.txt文件
root@cb7e310d02fd:/usr/share/nginx/html# echo "1234" >> test.txt root@cb7e310d02fd:/usr/share/nginx/html# cat test.txt 1234完成后我們退出容器并查看這個(gè)文件是否同步了
exit [vagrant@10 docker-nginx]$ cat test.txt 1234結(jié)果是同樣發(fā)生了同步。因?yàn)槲覀冃薷牡钠鋵?shí)是同一個(gè)文件。
熱更新
我們?cè)俅螆?zhí)行一次curl獲取web內(nèi)容
[vagrant@10 flask-app]$ curl 127.0.0.1 <html> <body><h1>Bind Mounting</h1><p>This is a demo.</p></body> </html>此時(shí)我們手動(dòng)修改本機(jī)目錄下的index.html文件
nano docker-nginx/index.html修改如下:
<html> <body><h1>Bind Mounting</h1><p>This is a app.</p></body> </html>驗(yàn)證在不重啟nginx服務(wù)器的情況下是否web內(nèi)容發(fā)生變化
[vagrant@10 docker-nginx]$ curl 127.0.0.1 <html> <body><h1>Bind Mounting</h1><p>This is a app.</p></body> </html>我們可以看到web內(nèi)容已經(jīng)發(fā)生了變化。
這對(duì)于開(kāi)發(fā)或后續(xù)更新來(lái)說(shuō)是很好的。
總結(jié)
以上是生活随笔為你收集整理的19-数据持久化-Bind Mounting的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Ubuntu 18.04安装NVIDIA
- 下一篇: MIP 支付组件,支付流程: