zoukankan      html  css  js  c++  java
  • 【云计算】使用docker搭建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,这里为了便于试验,尽量使用了简单粗暴的方式。
    
     

    参考资料:

    http://www.cnblogs.com/vimsk/p/5193413.html

    http://ju.outofmemory.cn/entry/128061

     

  • 相关阅读:
    [初学Untiy]SPACE SHOOTER TUTORIAL
    [OpenGL]第一章 OpenGL概述
    DSAA 第一章 引论
    Learn Python The Hard Way(27--)
    linux 系统tty、pty和pts 的概念及区别
    stuffs of install ubuntu
    第八章、Linux 磁盘与文件系统管理
    第七章 Linux文件与目录管理
    切换不同的echarts时,出现图标缩小,报警告,Can’t get dom width or height!
    echarts x轴的纵向区域随便点击获取点击的x轴那一纵向区域的值
  • 原文地址:https://www.cnblogs.com/junneyang/p/5307834.html
Copyright © 2011-2022 走看看