天天看點

提升Docker效率的小操作——用volume實作容器和主機之間共享資料 [轉載]

Docker是一個非常強大的工具,它幫助企業擴大産品規模,并簡化部署容器化應用程式的流程。對于Docker來說,建立一個容器實際上非常簡單:您隻需要拉取一個鏡像,并将其部署成容器就可以了。但是這個容器該如何儲存資料呢?換言之,您要如何處理這些資料呢?又或者說,您要如何在容器之間共享這些資料呢?

Docker 容器的機制是由一系列隻讀層構成,其最上層包含一個最終的讀寫層。這是一個非常複雜的系統——稱為聯合檔案系統(UFS)。

當您不需要保留資料時,該檔案系統可以很好的完成該任務。但是,當您需要停止、重新部署一個容器并需要保留資料時,那該怎麼辦呢? 為了能夠儲存資料(或者在容器之間共享資料),您必須用到volumes 。Docker volume 是存在于主機檔案系統上(在聯合檔案系統之外)的目錄(或檔案)。

您該如何建立和管理這些volumes ?接下來,跟着我找出答案吧!我将在Ubuntu Server 16.04平台上使用Docker的最新版本。不管您使用的是什麼主機作業系統,使用volumes的流程都是相同的。

讓我們建立一個名為“volume1”的volume 。這是通過如下指令完成的:

docker volume create --name volume1

如果我們輸入“docker volume ls”的指令,那麼我們剛剛建立的“volume1”将出現在圖1的清單中。

提升Docker效率的小操作——用volume實作容器和主機之間共享資料 [轉載]

(圖1)我們剛剛建立的“volume1”準備就緒

您可以通過輸入“docker volume inspect volume1”的指令來擷取更多關于“volume1”的詳細資訊。該指令的輸出結果(圖2)将顯示“volume1”的名稱、選項、挂載點等相關資訊。

提升Docker效率的小操作——用volume實作容器和主機之間共享資料 [轉載]

(圖2)關于“volume1”的細節

然而,并不是所有标準的volume都是有用的。接下來,讓我們建立一個可以讓Docker 容器變得更加靈活的volume吧。

現在,我們要做的就是部署一個新的容器(基于最新的Ubuntu鏡像),這個容器包含一個附着在主機目錄上的volume。這意味着您可以在該容器内工作并将資料儲存到容器目錄中,同時這些容器目錄中的資料将與主機目錄同步。您必須做的第一件事就是確定建立了主機目錄。我們将使用如下指令來建立一個名為“container-data”的目錄:

mkdir ~/container-data

確定在Docker使用者可以通路的位置來建立上述目錄。實際上,您可以在系統的任何位置建立該目錄(隻要使用者具有讀寫權限)。使用該目錄,部署容器的指令(将主機目錄附着到容器volume,它位于容器内的/ data目錄下)将是:

docker run -d -P --name test-container -v /home/jack/container-data:/data ubuntu

現在,您應該可以看到容器ID了,記下前四個字元,我們來測試一下。在shell界面,對正在運作的容器使用如下指令:

docker attach ID(其中ID是運作容器的前四個字元)

其中ID是運作容器的前四個字元。

現在,您的光标應該出現在bash提示符處。如果您輸入“ls /”的指令,您應該能看到那個我們在容器運作時添加的資料目錄。接下來,我們建立一個帶有“touch / data / test”指令的測試檔案。然後,回到主機的終端,并輸入“ls ~/ container-data”的指令。您應該可以看到列出的測試檔案。現在,再從同一終端輸入“touch ~/ container-data / test2”的指令。最後,傳回到我們的容器shell界面并輸入“ls / data”指令,這時應該會同時出現test和test2兩個檔案。這時,您運作的容器正在共享主機檔案上的資料。

您可以根據需要将盡可能多的容器附加到該主機目錄上,每個容器(以及主機)都可以通路相同的資料。正如Larry David 所說:“這真的是非常、非常、非常的友善”。

利用Volumes是一個使Docker容器變得更加有用的好方法。Volumes 可以幫助您備份資料,在容器之間共享資料,甚至可以在容器和主機之間共享資料。