Docker容器基于NFS实现跨主机跨容器的文件共享

发布时间 2023-11-20 22:46:07作者: 竹--石


涉及两方面知识:1.NFS在CentOS如何搭建;2.在docker容器内如何有效挂载到远程的文件服务器。下面我们先完成第一个任务,构建NFS网络文件系统,实现两个服务器之间文件互联互通。
NFS
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间共享资源。先构建两台独立的虚拟机,一台为docker服务器(192.168.31.230)它要链接到远程服务器地址为231的文件服务器上进行共享文件的获取,一台是文件服务器IP地址为(192.168.31.231)。下面先在231服务器构建完整的文件服务器(网络文件系统的基础设施)。
第一步:安装NFS所需的底层组件
yum install -y nfs-utils rpcbind
第一个nfs-utils 是nfs工具包,第二个rpcbind文件服务器服务端程序,两者缺一不可。
第二步:构建远程共享文件夹
mkdir /share cd /share/
第三步:构建一个核心的配置文件
cat >> /etc/exports <<- 'EOF' /share 192.168.31.0/24(rw,no_root_squash,sync) EOF
通过cat命令 向/etc/exports这个配置文件写入一行名为 /share 192.168.31.0/24(rw,no_root_squash,sync),其中/share 为我们新建的共享目录,192.168.31.0代表对31网段开放(rw,no_root_squash,sync)权限。
第四步:关闭防火墙(实际生产环境,酌情开放对外端口)
systemctl stop firewalld.service
第五步:启动nfs服务
systemctl start nfs.service
第六步:启动rpcbind服务
systemctl start rpcbind.service
第七步:将nfs设置为开机自动启动(锦上添花)
systemctl enable nfs.service
第八步:将rpcbind设置为自动启动(锦上添花)
systemctl enable rpcbind.service
到这里nfs在文件服务器的配置就完成了。输入命令:
exportfs
如果看到
/share 192.168.31.0/24
则代表我们的配置就成功了。

接下来我们在docker服务器(192.168.31.230)上做以下操作:
第一步:在docker服务器上安装nfs的客户端来进行远程通信。
yum install -y nfs-utils
第二步:验证一下上面的操作是否有效
showmount -e 192.168.31.231
查看231有那些挂载点对外暴露了。如果我们看到如下结果,说明可以正常访问了。

最后一件事儿,就是完成挂载的工作,让我们在230服务器上,像访问本地文件夹一样进行远程的文件访问。操作步骤如下:
第一步:创建一个本地文件夹
mkdir /mnt/share
第二步:用mount命令指向 文件服务器ip “192.168.31.231” + 远程路径“:/share” + 空格 + 本地目录“/mnt/share” ,完成远程目录与本地目录的映射。
mount 192.168.31.231:/share /mnt/share
这样230服务器就可以像读写本地文件一样,来进行远程服务器的访问了。

下面关键的问题来了,我们如何实现文件的挂在呢?这就需要先了解在docker中文件挂载的用法:
方法一:将数据映射到本地目录(不推荐--容易造成信息丢失)


方法二:利用卷(Volume)的方式进行挂载
启动nginx容器,注意-v的映射关系是宿主机nginx-config(Volume)到容器内/usr/share/nginx/html路径的映射,实际上就是宿主机文件目录/var/lib/docker/volumes/nginx-html/_data到容器内/usr/share/nginx/html路径的映射。
docker run -d --name volume-nginx \ -p 80:80 \ -v nginx-html:/usr/share/nginx/html/ \ nginx:latest
容器启动之后,我们再去看一下“/var/lib/docker/volumes/nginx-html/_data"路径,我们发现这个路径下多出来一些文件,都是nginx默认的html文件
这就是Volumes的好处:

第一步:在docker服务器上 变更 未来docker数据的存储地址,这个操作主要集中在一个配置文件daemon.json(docker的环境配置文件)
vim /etc/docker/daemon.json