天天看點

Docker基礎之九: 管理容器的資料管理容器的資料

(對docker感興趣的朋友可以加我的微信ghostcloud2016,然後我把你加到我們的一個docker愛好者群組裡面。)

到目前為止,我們已經介紹了docker的一些基本概念,如:容器的操作,鏡像的操作和網絡的操作等。在本節,我們将介紹如何管理容器内部的資料,以及容器間的資料互動。我們将介紹如何建立:

資料卷

資料型容器

資料卷是一個經過特殊設計的檔案夾,提供給容器使用。資料卷并不由unionfs管理,是以資料卷可以用作持久化和資料分享,它具有以下特性:

資料卷在容器建立的時候進行初始化。如果容器的鏡像在特定的mount點下有資料,那麼已有的資料将被拷貝到指定目錄。

資料卷可以在容器間共享和複用

對資料卷的改變是直接操作,不會復原。

當你更新鏡像時,資料卷的改變不會被儲存。

即使容器被删除了,資料卷也不會丢失。

是以,資料卷是用來持久化資料的,跟容器本身的生命周期是無關的。docker删除容器的時候,不會自動删除資料卷,是以當你使用資料卷的時候也要注意不要産生過多的垃圾資料。

資料卷是通過-v來指定的,在docker create和docker run的時候可以使用多個-v參數,指定多個資料卷。

這條指令在建立容器時,會建立一個/webapp目錄。 注意:我們也可以通過volume指令在dockerfile中指定需要mount的資料卷。 預設情況下,資料卷是可讀可寫的,但是你也可以設定為隻讀:

其中source是檔案系統在主機上的位址(注意這個位址是随機配置設定的,是以一定要注意垃圾回收),destination是容器中的位址。

通過-v我們可以給容器添加一個随機的資料卷,但是這種卷是不好控制的,是以我們可以mount一個本地檔案夾作為資料卷。

上面這條指令,我們将本地的/src/webapp映射到了容器的/opt/webapp目錄。由于将主機的檔案系統映射到了容器中,是以容器有了主機的完全通路權限,是以一定要注意安全。

-v參數除了可以mount檔案夾,還可以做檔案的映射。比如:

這條指令,将把主機的~/.bash_histroy映射到容器中,是以主機和容器可以共享bash指令的曆史資料。如果将~/.bash_profile映射進去,那就可以共享bash的配置。

如果你希望在容器間共享卷,那麼就可以使用資料型容器。我們可以先建立一個命名容器:

接下來,我們通過--volumes-from選項來進行資料卷的複用:

然後再建一個容器:

之後我們就可以在db1和db2中同時對/dbdata進行操作了。

我們可以通過下面的指令進行資料備份:

--volumes-from将把dbdata容器的資料卷mount到目前容器;

-v 将目前目錄映射到/backup目錄

tar指令将/dbdata打包

接下來,我們可以對容器進行資料恢複:

通過上面的操作,我們就可以自動備份、還原和遷移資料了。

由于資料卷的共享,會出現多個容器同時寫一個卷的情況,是以可能會導緻資料丢失,這裡面一定要特别注意。可以采取一定的同步機制來保證資料的一緻性。