Docker持久化存储之数据共享-创新互联

持久化存储 Data volume

要知道容器是有生命周期的。
docker默认的存储方式:存储类型:(strage driver:overlay2.xfs)

10年积累的网站建设、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有孝南免费网站建设让你可以放心的选择与我们合作。

data volume有两种挂载方式:

1)bind mount(用户管理):将宿主机上的某个目录或文件(不可以是没有格式化的磁盘文件),挂载到容器中,默认在容器内对此目录是有读写权限的,如果只需要向容器内添加文件,不希望覆盖目录,需要注意源文件必须存在,否则会被当做一个目录bind mount给容器。
2)docker manager volume(docker自动管理):不需要指定源文件,只需要指定mount point(挂载点)。把容器里面的目录映射到了本地。
这种方式相比bind mount 缺点是无法限制对容器里边目录或文件的权限。

使用第二种挂载方式,-v 挂载时,不指定源文件位置,则默认挂载的路径是:

[root@sqm-docker01 _data]# pwd
/var/lib/docker/volumes/dd173640edd5b0205bb02f3c4139647be12528b38289b9f93f18123a6b1266a8/_data
#当有目录挂载时,默认在/var/lib/docker/volumes/下会生成一串hash值,hash值下有一个_data的目录,容器内映射的文件就在此路径下。

实例一:单台dockerhost,容器间的数据共享

首先创建一个volume container:

volume container基本概念:**
  • volume container是专门为其他容器提供volume的容器。
  • volume container 提供的卷可以使bind mount,也可以是docker manager volume。

volume contianer的优点:
与bind mount相比,不必为每一容器指定源文件路径,所有路径都在volume container中定义好,容器只需与volume container关联,从而实现容器与host的解耦。

(1)创建volume container:
首先我在本地创建容器需要挂载的web网页目录:
[root@sqm-docker01 ~]# mkdir html
[root@sqm-docker01 ~]# echo "hello volume_data" > html/index.html
#我直接使用了两种挂载方式(基于busybox镜像来创建):
[root@sqm-docker01 ~]# docker create  --name vc_data01 -v /root/html/:/usr/share/nginx/html -v /other/useful/tools/ busybox

注意:该vcdata01也为一个容器,但它的状态是create。
Docker持久化存储之数据共享

(3)基于volume container运行nginx容器:
[root@sqm-docker01 ~]# docker run -d --name test1 -p 80:80 --volumes-from vc_data01 nginx:latest
  • --volumes-from:指定数据卷

(4)访问nginx的默认网页:
Docker持久化存储之数据共享
查看映射到本地默认路径,会生成两个hash值,代表挂载了两个host path。
Docker持久化存储之数据共享

实例二:跨主机实现数据共享

方法一:搭建nfs服务:

环境:两台dockerhost(centos7)
docker01:172.16.1.30
docker02:172.16.1.31
nfs服务器:172.16.1.40

nfs server:

[root@nfs-server ~]# yum -y install nfs-utils  #安装nfs服务
[root@nfs-server ~]# yum -y install rpcbind  #远程传输控制协议

[root@nfs-server ~]# vim /etc/exports
Docker持久化存储之数据共享

参数解释:
*:表示所有地址,也可以自定义ip地址,或者网段
rw:可读可写
sync:同步数据到磁盘
no_root_squash:加上这个选项后,root用户就会对共享的目录拥有至高的权限控制,就像是对本机的目录操作一样。

[root@nfs-server ~]# mkdir /nfs              #创建共享目录
[root@nfs-server ~]# systemctl start rpcbind    #先启动该服务
[root@nfs-server ~]# systemctl start nfs

docker01和dcoker02测试是否能够挂载:
Docker持久化存储之数据共享

Docker持久化存储之数据共享

docker01:
将本地目录挂载到nfs服务器上:

创建网页目录:
[root@sqm-docker01 ~]# mkdir html

[root@sqm-docker01 ~]# vim /etc/fstab ##进入配置文件进行挂载
Docker持久化存储之数据共享

[root@sqm-docker01 ~]# mount -a   #重新加载使其生效
[root@sqm-docker01 ~]# df -hT   #查看磁盘信息

Docker持久化存储之数据共享

编写网页内容:
[root@sqm-docker01 ~]# echo "hello docker02" > html/index.html
[root@sqm-docker01 ~]# cat html/index.html 
hello docker02
运行nginx容器:
[root@sqm-docker01 ~]# docker run -d --name nginx01 -p 80:80 -v /root/html/:/usr/share/nginx/html nginx:latest

Docker持久化存储之数据共享

docker02:
挂载nfs:

[root@sqm-docker02 ~]# mkdir html    #创建挂载目录
[root@sqm-docker02 ~]# vim /etc/fstab

Docker持久化存储之数据共享
[root@sqm-docker02 ~]# mount -a #重新加载使其生效

//查看目录文件是否同步:
[root@sqm-docker02 ~]# cat html/index.html 
hello docker02
//运行nginx容器:
[root@sqm-docker02 ~]# docker run -d --name nginx02 -p  80:80 -v /root/html/:/usr/share/nginx/html nginx

Docker持久化存储之数据共享

访问nginx页面:
Docker持久化存储之数据共享

我们在docker01上修改nginx页面,测试docker02nginx页面是否同步:

[root@sqm-docker01 ~]# echo "123456" > html/index.html

nginx02再次访问:
[root@sqm-docker02 ~]# curl 127.0.0.1
123456

方法二:使用volume container

环境:两台dockerhost主机(centos7)
docker01:172.16.1.30
docker02:172.16.1.31

(1)docker01上创建目录文件:
[root@sqm-docker01 ~]# mkdir html
[root@sqm-docker01 ~]# echo "hello docker02" > html/index.html
(2)编写Dockerfile:
[root@sqm-docker01 ~]# vim Dockerfile

Docker持久化存储之数据共享

//构建dockerfile:
[root@sqm-docker01 ~]# docker build -t data:latest .  #镜像名称自定义

Docker持久化存储之数据共享

(3)创建volume container并基于运行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
  • -P:随机在宿主机生成端口,默认从32768开始。

访问nginx网页:
[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:

//导入镜像
[root@sqm-docker02 ~]# docker load --input  data.tar
//创建volume container:
[root@sqm-docker02 ~]# docker create  --name vc_data03 data:latest
//基于container运行nginx:
[root@sqm-docker02 ~]# docker run  -d --name box2 -P --volumes-from vc_data03 nginx:latest

最后访问nginx默认界面(确保与docker01上的nginx页面相同)

[root@sqm-docker02 ~]# curl 127.0.0.1:32768
hello docker02

以上就是跨主机实现数据共享的多种方法,当然还有其他的方法,可能会在后续的博客中会写到。

———————— 本文至此结束,感谢阅读 ————————

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

网页题目:Docker持久化存储之数据共享-创新互联
标题路径:https://www.cdcxhl.com/article38/edpsp.html

成都网站建设公司_创新互联,为您提供服务器托管动态网站用户体验网站设计网站内链网站设计公司

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

搜索引擎优化