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 主机上都创建。未来可能会添加更多功能。

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