Docker容器实现跨主机文件共享(NFS服务器)

 

 

前言

需求:任意修改客户端容器内共享目录的内容,在服务器的的宿主机或者容器内也能看到实时的修改
技术:NFS、Dockers
原理:先利用NFS创建服务端与客户端之间的共享空间,再利用docker技术将客户端容器的某个目录挂载到共享目录,就能实现需求。同理,采用上述方法也能实现跨主机的容器之间文件的共享。

在这里插入图片描述

一、软件安装

主要介绍NFS服务的安装,Docker的安装可以自行查阅资料

//服务端
yum -y install rpcbind nfs-utils
systemctl start rpcbind
systemctl enable rpcbind
systemctl start nfs-server  //NFS依赖rpcbind进行通讯,所以要先启动rpcbind
systemctl enable nfs-server
//查看端口
netstat -antup | grep 2049

在这里插入图片描述

//客户端
yum -y install nfs-utils

二、环境部署

服务端:192.168.57.128(Centos7.6 )
客户端:192.168.57.129(Centos_clone)

0.创建共享目录

//服务端
mkdir /mnt/nfs_file
//客户端
mkdir /mnt/nfs_file

1.服务端NFS配置

vim /etc/exports
/mnt/nfs_file/ 192.168.57.0/24(rw,sync,no_root_squash)

//ro只读权限
//rw读写权限
//sync同步写入内存与磁盘当中
//no_all_squash保留共享文件的UID和GID(默认)
//no_root_squash使得root用户具有根目录的完全访问权限

在这里插入图片描述

//配置生效
 exportfs -rv

在这里插入图片描述

2.客户端NFS配置

与服务器相关联:

 mount -t nfs 192.168.57.128:/mnt/nfs_file /mnt/nfs_file
//挂载测试
showmount -e 192.168.57.128

在这里插入图片描述
出现上图报错时,需要关闭服务端与客户端之间的防火墙,或者开放NFS使用的2049端口。

systemctl stop firewalld

//添加规则(指定端口,--permanent永久生效,没有此参数重启后失效)
//firewall-cmd --zone=public --add-port=2049/tcp --permanent

然后,出现下图结果表示服务一切正常。
在这里插入图片描述

3.验证

客户端:
在这里插入图片描述
服务端:
在这里插入图片描述

三、客户端容器挂载

创建容器时指定对应关系:

docker run-it -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -itd -e "container=docker" --privileged=true -v /mnt/nfs_file:/mnt --name test -h test test:1222 /usr/sbin/init

在这里插入图片描述
再容器内挂载点创建文件:
在这里插入图片描述
此时再服务器上能够看到新建的文件:
在这里插入图片描述
在这里插入图片描述
此时再服务端主机上对文件333添加内容,在客户端容器里能看到想要修改:
在这里插入图片描述
在这里插入图片描述

四、开机配置

为保证每次设备重启后环境NFS环境正常并且增加可靠性,可以修改启动文件
/etc/rc.local

//服务端
#!/bin/bash
touch /var/lock/subsys/local
systemctl stop firewalld
rm -rf /mnt/nfs_file
mkdir /mnt/nfs_file
exportfs -rv
//客户端
#!/bin/bash
touch /var/lock/subsys/local
systemctl stop firewalld
rm -rf /mnt/nfs_file
mkdir /mnt/nfs_file

mount -t nfs 192.168.57.128:/mnt/nfs_file /mnt/nfs_file

总结

到此,需求已经基本实现。
可以在服务端也创建容器进行挂载,这样就能实现跨主机容器与容器之间的文件共享。

参考博客:

posted @ 2021-01-04 18:10  h云淡风轻  阅读(74)  评论(0编辑  收藏  举报  来源