使用docker搭建nfs實現容器間共享文件

首先介紹下今天的兩個主角:nfs和dockerhtml

nfs 是什麼

NFS(Network File System)即網絡文件系統,是FreeBSD支持的文件系統中的一種,它容許網絡中的計算機之間經過TCP/IP網絡共享資源。在NFS的應用中,本地NFS的客戶端應用能夠透明地讀寫位於遠端NFS服務器上的文件,就像訪問本地文件同樣。 摘自百度百科docker

docker 是什麼

這個就很少說了,近兩年一個很是流行的東西哦。ubuntu

主角介紹完畢,那麼要說說爲何要使用docker來搭建nfs,其實本文標題已經說明,主要目的仍是爲了實現容器間文件的共享。 用過docker的都應該知道docker能夠支持容器目錄掛載到宿主機。而經過nfs,則能夠將容器之間的目錄實現共享掛載。若是你有多個容器間須要共享文件的需求,這個將是一個能夠嘗試的方案,具體使用場景看你們發揮想象了,今天這裏主要實踐一下如何實現這個功能。bash

涉及到的知識

  • 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服務器

執行tcp

 

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

執行完畢後進入容器終端測試

修改配置ui

vi /etc/exports

在末尾加入url

/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,這裏爲了便於試驗,儘可能使用了簡單粗暴的方式。

##文檔信息

相關文章
相關標籤/搜索