亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Docker 數據管理 - 數據卷

我們知道,Docker 提供了兩類數據管理的方式:

  1. 掛載宿主機目錄或文件;
  2. 使用數據卷;

上節課我們學習了掛載宿主機目錄或文件的數據管理方式。本節,我們介紹如何使用 Docker 數據卷。但是明明可以使用掛載宿主機目錄或文件的方式,為什么還要使用數據卷呢?

其實,使用數據卷的好處就在于:我們不必自己維護一個外部路徑掛載和存儲的關系,借助Docker管理數據,并且通過語義化數據卷命名,更加方便直觀地使用它來數據共享。

1. 使用數據卷

在使用數據卷進行掛載時,我們只需指定容器中被掛載的目錄即可:

docker run -d -it --name busybox -v mydata:/tmp busybox

Tips:mydata 是 Docker 數據卷的名稱, 不是宿主機的目錄或文件,為了避免混淆,指定當前路徑下的目錄或文件掛載方式時,源地址需要使用絕對路徑。

數據卷掛載到容器后,我們可以通過 docker inspect busybox 看到容器中數據卷掛載的信息。
圖片描述

數據卷示例

其中,Type代表這是掛載類型為volme卷,Name標識數據卷的名稱是我們之前指定的mydataSource標明在要掛載的數據卷在宿主機的真實路徑為/var/lib/docker/volumes/mydata/_data,其中/var/lib/docker/volumes/是一個由Docker統一管理的存放路徑,Destination表示掛載到 busybox 容器內的路徑是/tmp。

2. 共用數據卷

通過掛載相同的數據卷,讓多個容器能夠操作數據卷中的數據,實現容器間的目錄共享。

數據卷的命名在 Docker 中是唯一的,讓多個容器掛載同一個數據卷, 只需要指定同一個數據卷名稱即可。

docker run -d -it --name busybox -v mydata:/tmp busybox
docker run -d -it --name busybox2 -v mydata:/tmp busybox

掛載數據卷時,如果數據卷不存在,Docker 會自動創建,如果同名數據卷已經存在,則直接引用。

這里我們再補充一些常用的數據卷操作:

# 刪除數據卷
docker volume rm mydata
# 手動創建數據卷
docker volume create mydata
# 刪除那些沒有被容器引用的數據卷
docker volume prune

Tips:使用 docker rm -f busybox busybox2 移除不再使用的容器。

3. 對比兩種掛載方式

數據卷 是受控存儲,是由 Docker 引擎進行管理維護的。

使用卷,你可以不必處理 uid、SELinux 等各種權限問題,Docker 引擎在建立卷時會自動添加安全規則,以及根據掛載點調整權限。并且可以統一列表、添加、刪除。另外,除了本地卷外,還支持網絡卷、分布式卷。

掛載目錄屬于用戶自行維護,你就必須手動處理所有權限問題,好處就在于這種方式與宿主機的文件交換更方便一些。

4. 小結

數據卷實際上也是宿主機的一個目錄,這個目錄由 Docker 管理,利用數據卷可以方便地將數據在多個容器中共享。

按照 Docker 最佳實踐的要求,容器不應該向其存儲層內寫入任何數據,容器存儲層要保持無狀態化。所有的文件寫入操作,都應該使用數據卷或者綁定掛載宿主目錄,在這些位置的讀寫會跳過容器存儲層,直接對宿主發生讀寫,其性能和穩定性更高。