數據持久化之bind Mounting

1、默認狀況

1.建立一個Nginx測試鏡像

Dockerfile:html

FROM nginx:latest WORKDIR /usr/share/nginx/html COPY index.html index.html  #使用當前目錄下index.html文件

index.htmlnginx

[root@localhost docker-nginx]# cat index.html <!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>hello</title>
</head>
<body>
  <h1>Hello Docker! </h1>
</body>
</html>

編譯docker

[root@localhost docker-nginx]# docker build -t my_nginx:v1 . [root@localhost docker-nginx]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE my_nginx v1 897d33067e21 5 seconds ago       109 MB
2.使用my_ingx鏡像建立一個容器,並訪問
[root@localhost docker-nginx]# docker run -d --name my_nginx -p 80:80 my_nginx:v1 2ff4ee3a55e500785b229527fc72a17b34b2ed96c7c9b419a23ab57644aada1d

3.進入容器內部修改index.html,並訪問查看結果
[root@localhost docker-nginx]# docker exec -it my_nginx /bin/bash root@2ff4ee3a55e5:/usr/share/nginx/html# sed -i "s#Hello Docker#Hello Nginx#g" index.html

4.修改當前目錄下index.html並訪問查看結果
[root@localhost docker-nginx]# sed -i "s#Hello Docker#Hello Nginx on physics#g" index.html

 

2、使用bind Mounting

1.刪除舊容器再新建一個容器,並訪問,注意結果
[root@localhost docker-nginx]# docker run -d --name my_nginx -v $(pwd):/usr/share/nginx/html -p 80:80 my_nginx:v1 24e94344b29c333fceec7f6164ac5757d4747fd4e71e9a6d45e373dfaf130013

2.進入容器內部修改index.html,並訪問查看結果
[root@localhost docker-nginx]# docker exec -it my_nginx /bin/bash root@24e94344b29c:/usr/share/nginx/html# sed -i "s#Hello Nginx on physics#Hello Nginx on docker#g" index.html

3.退出容器並修改當前目錄下index.html,並訪問
[root@localhost docker-nginx]# sed -i "s#Hello Nginx on docker#Hello Nginx, This is test page#g" index.html

4.查看本地index.html和容器index.html
[root@localhost docker-nginx]# md5sum index.html  #查看宿主機與容器中index.html hash值 60cbc4142a556d3e5a1e812edf288757 index.html [root@localhost docker-nginx]# docker exec -it my_nginx md5sum index.html 60cbc4142a556d3e5a1e812edf288757 index.html
[root@localhost docker
-nginx]# cat index.html #查看宿主機與容器中index.html 內容 <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>hello</title> </head> <body> <h1>Hello Nginx, This is test page! </h1> </body> </html> [root@localhost docker-nginx]# docker exec -it my_nginx cat index.html <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>hello</title> </head> <body> <h1>Hello Nginx, This is test page! </h1> </body> </html>

總結及與Data Volume的區別:

1.Data Volume 須要在 Dockerfile 內聲明須要建立的 volume 目錄。 Bind Mounting 則不須要在 Dockerfile 聲明 volume,只須要在建立容器的時候,也就是 run 的時候聲明便可。 2.使用Data Volume持久化的方式,是由於咱們容器是一個數據源的產生地方,自己會產生文件和數據,而咱們不想讓咱們的文件和數據隨着容器的消失而消失,所以用這種方式持久化 使用Bind Mounting 持久化的方式,則本地的目錄文件和容器中的文件是同步的,若是本地的文件作了修改,那麼容器中的文件也會修改。 即:Bind mount會覆蓋容器中的文件,而volume mount則不會,即若是容器中已有文件,則會將文件同步到主機的目錄上
相關文章
相關標籤/搜索