Docker卷插件

Docker Engine卷插件可将Engine部署与Amazon EBS等外部存储系统集成,并使数据卷在单个Docker主机的生命周期内得以保留。有关更多信息,请参见 插件文档

变更日志

1.13.0

  • 如果用作v2插件体系结构的一部分,则作为插件返回的路径的一部分的挂载点必须挂载在PropagatedMount插件配置(#26398)中指定的目录下。

1.12.0

  • Status字段添加到VolumeDriver.Get响应(#21006
  • 添加VolumeDriver.Capabilities以获取卷驱动程序的功能(#22077

1.10.0

  • 添加VolumeDriver.Get,获取有关卷的详细信息(#16534
  • 添加VolumeDriver.List,列出驱动程序拥有的所有卷(#16534

1.8.0

  • 最初对卷驱动程序插件的支持(#14659

命令行更改

要授予容器访问卷的权限,请使用命令 上的--volume--volume-driver标志docker container run。的--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

volumedriver与a结合指定volumename可让您使用Flocker之类的插件来管理单个主机外部的卷,例如EBS上的卷。

创建一个VolumeDriver

容器创建端点(/containers/create)接受一个允许指定驱动程序名称的VolumeDriver 类型的字段string。如果未指定,则默认为"local"(本地卷的默认驱动程序)。

批量插件协议

如果插件VolumeDriver在激活时注册为,则必须在主机文件系统上为Docker Daemon提供可写路径。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": ""
    }
    

如果发生错误,则以字符串错误作为响应。Mountpoint并且Status是可选的。

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

支持的范围是globallocal。中的任何其他值都Scope将被忽略并local使用。Scope允许集群管理器以不同方式处理卷。例如,范围为global,向集群管理器发出信号,表明它只需要创建一次卷,而不必在每个Docker主机上创建一次。将来可能会添加更多功能。

示例用法泊坞窗数据插件api