Docker 卷外掛

Docker Engine 卷外掛使 Engine 部署能夠與外部儲存系統(如 Amazon EBS)整合,並使資料卷能夠在單個 Docker 主機的生命週期之外持久存在。有關更多資訊,請參閱外掛文件

變更日誌

1.13.0

  • 如果作為 v2 外掛架構的一部分使用,外掛返回的路徑中的掛載點必須掛載在外掛配置中 PropagatedMount 指定的目錄下 (#26398)

1.12.0

  • VolumeDriver.Get 響應新增 Status 欄位 (#21006)
  • 新增 VolumeDriver.Capabilities 以獲取卷驅動程式的功能 (#22077)

1.10.0

  • 新增 VolumeDriver.Get,用於獲取卷的詳細資訊 (#16534)
  • 新增 VolumeDriver.List,用於列出驅動程式擁有的所有卷 (#16534)

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

volumedrivervolumename 結合指定,允許您使用諸如 Flocker 之類的外掛來管理單個主機之外的卷,例如 EBS 上的卷。

建立 VolumeDriver

容器建立端點 (/containers/create) 接受一個型別為 stringVolumeDriver 欄位,允許指定驅動程式的名稱。如果未指定,則預設為 "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": ""
    }

如果發生錯誤,則返回一個字串錯誤。MountpointStatus 是可選的。

/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"
  }
}

支援的範圍是 globallocalScope 中的任何其他值都將被忽略,並使用 localScope 允許叢集管理器以不同方式處理卷。例如,範圍為 global 表示叢集管理器只需建立一次卷,而不是在每個 Docker 主機上都建立。未來可能會新增更多功能。