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 Daemon 提供主機檔案系統上的可寫路徑。Docker daemon 會將這些路徑提供給容器使用。Docker daemon 透過將提供的路徑綁定掛載 (bind-mount) 到容器中,使磁碟區可用。
注意磁碟區外掛程式不應將資料寫入
/var/lib/docker/目錄,包括/var/lib/docker/volumes。/var/lib/docker/目錄保留給 Docker 使用。
/VolumeDriver.Create
請求 (Request)
{
"Name": "volume_name",
"Opts": {}
}指示外掛程式使用者想要建立一個磁碟區,並提供使用者指定的磁碟區名稱。外掛程式不需要立即在檔案系統上實際建立該磁碟區(直到呼叫 Mount 為止)。Opts 是從使用者請求傳遞過來的驅動程式特定選項對應表 (map)。
回應 (Response)
{
"Err": ""
}如果發生錯誤,則以字串錯誤訊息回應。
/VolumeDriver.Remove
請求 (Request)
{
"Name": "volume_name"
}從磁碟中刪除指定的磁碟區。當使用者呼叫 docker rm -v 以移除與容器相關聯的磁碟區時,會發出此請求。
回應 (Response)
{
"Err": ""
}如果發生錯誤,則以字串錯誤訊息回應。
/VolumeDriver.Mount
請求 (Request)
{
"Name": "volume_name",
"ID": "b87d7442095999a92b65b3d9691e697b61713829cc0ffd1bb72e4ccd51aa4d6c"
}Docker 要求外掛程式提供一個磁碟區,並給定使用者指定的磁碟區名稱。每個容器啟動時會呼叫一次 Mount。如果多次請求相同的 volume_name,外掛程式可能需要追蹤每個新的掛載請求,並在第一次掛載請求時進行配置,在最後一次對應的解除掛載請求時進行解除配置。
ID 是請求掛載的呼叫者的唯一識別碼。
回應 (Response)
v1
{ "Mountpoint": "/path/to/directory/on/host", "Err": "" }v2
{ "Mountpoint": "/path/under/PropagatedMount", "Err": "" }
Mountpoint 是磁碟區已可用之處的主機(v1)或外掛程式內(v2)的路徑。
Err 為空或包含錯誤字串。
/VolumeDriver.Path
請求 (Request)
{
"Name": "volume_name"
}請求給定 volume_name 的磁碟區路徑。
回應 (Response)
v1
{ "Mountpoint": "/path/to/directory/on/host", "Err": "" }v2
{ "Mountpoint": "/path/under/PropagatedMount", "Err": "" }
以磁碟區已可用之處的主機(v1)或外掛程式內(v2)的路徑,和/或如果發生錯誤則以字串錯誤訊息進行回應。
Mountpoint 是選用的。然而,如果未提供此參數,外掛程式稍後可能會再次被查詢。
/VolumeDriver.Unmount
請求 (Request)
{
"Name": "volume_name",
"ID": "b87d7442095999a92b65b3d9691e697b61713829cc0ffd1bb72e4ccd51aa4d6c"
}Docker 不再使用該命名磁碟區。每個容器停止時會呼叫一次 Unmount。外掛程式可以推斷此時可以安全地解除配置該磁碟區。
ID 是請求掛載的呼叫者的唯一識別碼。
回應 (Response)
{
"Err": ""
}如果發生錯誤,則以字串錯誤訊息回應。
/VolumeDriver.Get
請求 (Request)
{
"Name": "volume_name"
}取得關於 volume_name 的資訊。
回應 (Response)
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
請求 (Request)
{}取得向外掛程式註冊的磁碟區列表。
回應 (Response)
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
請求 (Request)
{}取得驅動程式支援的功能列表。
驅動程式不一定要實作 Capabilities。如果未實作,將使用預設值。
回應 (Response)
{
"Capabilities": {
"Scope": "global"
}
}支援的範圍 (scopes) 為 global 和 local。Scope 中的任何其他值都將被忽略,並預設使用 local。Scope 允許叢集管理員以不同方式處理磁碟區。例如,global 範圍向叢集管理員發出訊號,表示它只需要建立一次磁碟區,而不是在每個 Docker 主機上都建立。未來可能會新增更多功能。