Docker 磁碟區插件

Docker Engine 磁碟區外掛程式可讓 Engine 部署與外部儲存系統(例如 Amazon EBS)整合,並讓資料磁碟區的生命週期超過單一 Docker 主機。如需詳細資訊,請參閱外掛程式文件

變更紀錄

1.13.0

  • 如果做為 v2 外掛程式架構的一部分使用,則外掛程式所傳回路徑的一部分掛載點必須掛載在外掛程式設定中 PropagatedMount 指定的目錄下(#263981.12.0
    • Status 欄位新增至 VolumeDriver.Get 回應(#21006#220771.10.0

      1.8.0

      命令列變更

      若要讓容器存取磁碟區,請在 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
      • 掛載點 是主機 (v1) 或插件 (v2) 中已提供磁碟區的路徑。

      volumedriver

      volumedrivervolumename 搭配使用,可讓您使用諸如 Flocker 等插件來管理單一主機外部的磁碟區,例如 EBS 上的磁碟區。

      建立 VolumeDriver

      容器建立端點 (/containers/create) 接受類型為 stringVolumeDriver 欄位,允許指定驅動程式名稱。如果未指定,則預設為 "local"(本地磁碟區的預設驅動程式)。

      磁碟區外掛程式協定

      如果插件在啟動時將自身註冊為 VolumeDriver,則它必須向 Docker Daemon 提供主機檔案系統上的可寫入路徑。Docker Daemon 將這些路徑提供給容器使用。Docker Daemon 透過將提供的路徑繫結掛載到容器中來提供磁碟區。

      注意事項

      磁碟區插件不應將資料寫入 /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": ""
        }

      掛載點 是主機 (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) 內已提供磁碟區的路徑回應,如果發生錯誤,則以字串錯誤回應。

      掛載點 是可選的。但是,如果未提供,插件可能會在稍後再次被查詢。

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

      如果發生錯誤,則以字串錯誤回應。掛載點狀態 是可選的。

      /VolumeDriver.List

      請求

      {}

      取得向插件註冊的磁碟區清單。

      回應

      • v1

        {
          "Volumes": [
            {
              "Name": "volume_name",
              "Mountpoint": "/path/to/directory/on/host"
            }
          ],
          "Err": ""
        }
      • v2

        {
          "Volumes": [
            {
              "Name": "volume_name",
              "Mountpoint": "/path/under/PropagatedMount"
            }
          ],
          "Err": ""
        }

      如果發生錯誤,則以字串錯誤回應。掛載點 是可選的。

      /VolumeDriver.Capabilities

      請求

      {}

      取得驅動程式支援的功能清單。

      驅動程式不需要實作 Capabilities。如果未實作,則使用預設值。

      回應

      {
        "Capabilities": {
          "Scope": "global"
        }
      }

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