Docker 卷插件

Docker Engine卷插件使Engine部署能够与外部存储系统(例如Amazon EBS)集成,并使数据卷能够在单个Docker主机的生命周期之外持久存在。有关更多信息,请参阅插件文档

变更日志

1.13.0

  • 如果用作v2插件架构的一部分,则作为插件返回的路径一部分的挂载点必须挂载在插件配置中指定的目录下(#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字段,允许指定驱动程序的名称。如果

卷插件协议

如果插件在激活时将自身注册为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": ""
    }

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 主机上创建。