非常教程

Docker 17参考手册

引擎: 扩展 | Engine: Extend

卷插件(引擎) | Volume plugins (Engine)

编写卷插件

Docker 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

通过volumedrivervolumename联合指定,您可以使用插件(如Flocker)来管理单个主机(例如EBS上的那些主机)的外部卷。

创建一个VolumeDriver

容器创建endpoint(/containers/create)接受允许指定驱动程序名称的VolumeDriver类型字段string。如果未指定,则默认为"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: { "Mountpoin": "/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

Request:

{}

获取插件注册的卷列表。

响应:

  • 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

Docker 17

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

主页 https://docker.com/
源码 https://github.com/docker/docker
版本 17
发布版本 17.06