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

如果發生錯誤,則以字串錯誤訊息回應。MountpointStatus 是選用的。

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

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.