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
总结
到此,需求已经基本实现。
可以在服务端也创建容器进行挂载,这样就能实现跨主机容器与容器之间的文件共享。
参考博客:
- 搭建NFS服务器https://www.cnblogs.com/diantong/p/10895954.html
- Doker : Docker 容器与宿主机共享文件https://blog.csdn.net/qq_21383435/article/details/105176902