Docker 卷外掛
Docker Engine 卷外掛使 Engine 部署能夠與外部儲存系統(如 Amazon EBS)整合,並使資料卷能夠在單個 Docker 主機的生命週期之外持久存在。有關更多資訊,請參閱外掛文件。
變更日誌
1.13.0
- 如果作為 v2 外掛架構的一部分使用,外掛返回的路徑中的掛載點必須掛載在外掛配置中
PropagatedMount
指定的目錄下 (#26398)
1.12.0
1.10.0
1.8.0
- 對卷驅動程式外掛的初始支援 (#14659)
命令列變更
要為容器提供對卷的訪問許可權,請在 docker container run
命令上使用 --volume
和 --volume-driver
標誌。--volume
(或 -v
)標誌接受卷名和主機上的路徑,而 --volume-driver
標誌接受驅動程式型別。
$ docker volume create --driver=flocker volumename
$ docker container run -it --volume volumename:/data busybox sh
--volume
--volume
(或 -v
)標誌接受一個格式為 <volume_name>:<mountpoint>
的值。值的兩個部分由冒號 (:
) 字元分隔。
- 卷名是卷的可讀名稱,不能以
/
字元開頭。在本主題的其餘部分,它被稱為volume_name
。 Mountpoint
是卷在主機(v1)或外掛(v2)中可用的路徑。
volumedriver
將 volumedriver
與 volumename
結合指定,允許您使用諸如 Flocker 之類的外掛來管理單個主機之外的卷,例如 EBS 上的卷。
建立 VolumeDriver
容器建立端點 (/containers/create
) 接受一個型別為 string
的 VolumeDriver
欄位,允許指定驅動程式的名稱。如果未指定,則預設為 "local"
(本地卷的預設驅動程式)。
卷外掛協議
如果外掛在啟用時將自己註冊為 VolumeDriver
,它必須向 Docker 守護程序提供主機檔案系統上的可寫路徑。Docker 守護程序將這些路徑提供給容器使用。Docker 守護程序透過將提供的路徑繫結掛載到容器中來使卷可用。
注意卷外掛不應將資料寫入
/var/lib/docker/
目錄,包括/var/lib/docker/volumes
。/var/lib/docker/
目錄是為 Docker 保留的。
/VolumeDriver.Create
請求
{
"Name": "volume_name",
"Opts": {}
}
指示外掛,使用者希望根據使用者指定的卷名建立一個卷。外掛尚不需要在檔案系統上實際建立卷(直到呼叫 Mount
)。Opts
是從使用者請求傳遞過來的驅動程式特定選項的對映。
響應
{
"Err": ""
}
如果發生錯誤,則返回一個字串錯誤。
/VolumeDriver.Remove
請求
{
"Name": "volume_name"
}
從磁碟上刪除指定的卷。當用戶呼叫 docker rm -v
來移除與容器關聯的卷時,會發出此請求。
響應
{
"Err": ""
}
如果發生錯誤,則返回一個字串錯誤。
/VolumeDriver.Mount
請求
{
"Name": "volume_name",
"ID": "b87d7442095999a92b65b3d9691e697b61713829cc0ffd1bb72e4ccd51aa4d6c"
}
Docker 要求外掛根據使用者指定的卷名提供一個卷。每個容器啟動時會呼叫一次 Mount
。如果同一個 volume_name
被多次請求,外掛可能需要跟蹤每個新的掛載請求,並在第一個掛載請求時進行配置,在最後一個相應的解除安裝請求時進行取消配置。
ID
是請求掛載的呼叫者的唯一 ID。
響應
v1
{ "Mountpoint": "/path/to/directory/on/host", "Err": "" }
v2
{ "Mountpoint": "/path/under/PropagatedMount", "Err": "" }
Mountpoint
是卷在主機(v1)或外掛(v2)中可用的路徑。
Err
為空或包含一個錯誤字串。
/VolumeDriver.Path
請求
{
"Name": "volume_name"
}
請求具有給定 volume_name
的卷的路徑。
響應
v1
{ "Mountpoint": "/path/to/directory/on/host", "Err": "" }
v2
{ "Mountpoint": "/path/under/PropagatedMount", "Err": "" }
響應卷在主機(v1)或外掛內部(v2)可用的路徑,和/或在發生錯誤時返回一個字串錯誤。
Mountpoint
是可選的。但是,如果未提供,外掛稍後可能會再次被查詢。
/VolumeDriver.Unmount
請求
{
"Name": "volume_name",
"ID": "b87d7442095999a92b65b3d9691e697b61713829cc0ffd1bb72e4ccd51aa4d6c"
}
Docker 不再使用該命名卷。每個容器停止時會呼叫一次 Unmount
。外掛可以推斷此時取消配置卷是安全的。
ID
是請求掛載的呼叫者的唯一 ID。
響應
{
"Err": ""
}
如果發生錯誤,則返回一個字串錯誤。
/VolumeDriver.Get
請求
{
"Name": "volume_name"
}
獲取有關 volume_name
的資訊。
響應
v1
{ "Volume": { "Name": "volume_name", "Mountpoint": "/path/to/directory/on/host", "Status": {} }, "Err": "" }
v2
{ "Volume": { "Name": "volume_name", "Mountpoint": "/path/under/PropagatedMount", "Status": {} }, "Err": "" }
如果發生錯誤,則返回一個字串錯誤。Mountpoint
和 Status
是可選的。
/VolumeDriver.List
請求
{}
獲取在外掛中註冊的卷列表。
響應
v1
{ "Volumes": [ { "Name": "volume_name", "Mountpoint": "/path/to/directory/on/host" } ], "Err": "" }
v2
{ "Volumes": [ { "Name": "volume_name", "Mountpoint": "/path/under/PropagatedMount" } ], "Err": "" }
如果發生錯誤,則返回一個字串錯誤。Mountpoint
是可選的。
/VolumeDriver.Capabilities
請求
{}
獲取驅動程式支援的功能列表。
驅動程式不需要實現 Capabilities
。如果未實現,將使用預設值。
響應
{
"Capabilities": {
"Scope": "global"
}
}
支援的範圍是 global
和 local
。Scope
中的任何其他值都將被忽略,並使用 local
。Scope
允許叢集管理器以不同方式處理卷。例如,範圍為 global
表示叢集管理器只需建立一次卷,而不是在每個 Docker 主機上都建立。未來可能會新增更多功能。