使用docker搭建nfs实现容器间共享文件

摘要:
首先,让我们介绍今天的两个主角:nfs和dockernfs。什么是NFS,网络文件系统?它是FreeBSD支持的文件系统之一。它允许网络中的计算机通过TCP/IP网络共享资源。在介绍了主角之后,为什么要使用Docker来构建nfs?事实上,本文的标题已经说明了主要目的是在容器之间共享文件。任何使用过Docker的人都应该知道Docker可以支持容器目录装载到主机。这里涉及的主要参数是–link参数,它告诉Docker容器使用nfs服务器容器并将其别名命名为nfs。

首先介绍下今天的两个主角:nfs和docker

nfs 是什么

NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。 摘自百度百科

docker 是什么

这个就不多说了,近两年一个非常流行的东西哦。

主角介绍完毕,那么要说说为什么要使用docker来搭建nfs,其实本文标题已经说明,主要目的还是为了实现容器间文件的共享。 用过docker的都应该知道docker可以支持容器目录挂载到宿主机。而通过nfs,则可以将容器之间的目录实现共享挂载。如果你有多个容器间需要共享文件的需求,这个将是一个可以尝试的方案,具体使用场景看大家发挥想象了,今天这里主要实践一下如何实现这个功能。

涉及到的知识

  • nfs安装
  • docker容器间通信
  • docker privileged
  • dockerfile
  • docker镜像

编写dockerfile

FROM ubuntu
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update -qq && apt-get install -y nfs-kernel-server runit inotify-tools -qq
RUN mkdir -p /exports

VOLUME /exports

EXPOSE 111/udp 2049/tcp

制作docker镜像

 docker build -t=scottkiss/nfs .

运行该命令需要一段时间,成功后执行

docker images

将会看到本地刚刚创建nfs的docker镜像

配置并运行nfs服务器

执行

docker run -it --name nfs-server --privileged scottkiss/nfs

执行完毕后进入容器终端

修改配置

vi /etc/exports

在末尾加入

/exports *(rw,sync,no_subtree_check,fsid=0,no_root_squash)

然后执行

exportfs -r

接着启动rpcbind服务

service rpcbind start

最后启动nfs服务

service nfs-kernel-server start

至此,不出意外,已经成功的启动了nfs服务器,并且将/exports目录共享了出去。这里,笔者在开始的时候遇到一坑, 就是启动时候需要加上–privileged参数,否则启动nfs服务时候会提示权限不足报错。主要是这个过程中涉及到了mount操作, 使用该参数后使得container内的root拥有真正的root权限,这样就不会报错了。

配置并启动客户端

客户端就简单多了,不需要像服务器那样配置了。 执行

docker run -it --link nfs-server:nfs  --privileged scottkiss/nfs

进入容器终端。然后执行

service rpcbind start

接着执行远程挂载命令

mount -t nfs -o proto=tcp,port=2049 $NFS_PORT_2049_TCP_ADDR:/exports /home

这样,便将服务器的exports目录挂载到了客户端的home目录了。

迫不及待的可以试试了,如在server终端的/exports目录下添加一个文件,在client的/home下也会同步添加。

这里涉及的主要就是–link参数,这个参数就是告诉Docker容器需要使用nfs-server这个容器并将其别名命名为nfs。这样,就可以使用$NFS_PORT_2049_TCP_ADDR来获取服务器ip了。

总结

以上所有只是为了测试而做的一个粗糙的方案,还有很多改进之处,包括dockerfile,这里为了便于试验,尽量使用了简单粗暴的方式。

##文档信息

免责声明:文章转载自《使用docker搭建nfs实现容器间共享文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux的ssh监听多个端口FPGA---ucf文件编写下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Windows 10 安装 Docker for Windows

Docker for Windows是Docker社区版(CE)应用程序。 Docker for Windows安装包包括在Windows系统上运行Docker所需的一切。 本主题介绍了预安装注意事项,以及如何下载和安装Docker for Windows。 下载Docker for Windows 地址:https://download.docker.c...

实战角度比较EJB2和EJB3的架构异同

】     EJB编程模型的简化     首先,EJB3简化的一个主要表现是:在EJB3中,一个EJB不再象EJB2中需要两个接口一个Bean实现类,虽然我们以前使用JBuilder这样可视化开发工具自动生成了EJB2的这三个类,好像不觉得复杂,但是当EJB个数增加时,就显得累赘了。     简化后的EJB3的sessionBean依靠annotation...

docker-Gitlab、GitLab Runner安装

以下操作均在CentOs下操作 1、Gitlab install ① 启动gitlab docker run --detach --hostname 115.30.149.35 --publish 8888:8888 --publish 24:22 --name gitlab --restart always --volume...

Docker 镜像加速

安装docker # yum -y install yum-utils device-mapper-persistent-data lvm2 # yum-config-manager -y --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # yum -...

docker运行爬虫代码

目录 docker 启动与停止 镜像制作 Dockerfile build 镜像 镜像操作 容器操作 docker运行爬虫代码 系统:Ubuntu 在项目根目录的同级目录下新建 Dockerfile 文件,这个Dockerfile就作为打包项目的配置文件 但是在这之前我还要做一件事情:就是将 python 依赖的一些基础环境打包成一个基础镜像,...

(转) docker跨主机 macvlan 网络配置

原文链接 https://github.com/alfredhuang211/study-docker-doc/blob/master/docker%E8%B7%A8%E4%B8%BB%E6%9C%BAmacvlan%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE.md#搭建环境 -----以下部分转自原文----- 搭建环境 v...