Docker卷插件
Docker Engine卷插件可将Engine部署与Amazon EBS等外部存储系统集成,并使数据卷在单个Docker主机的生命周期内得以保留。有关更多信息,请参见 插件文档。
变更日志
1.13.0
- 如果用作v2插件体系结构的一部分,则作为插件返回的路径的一部分的挂载点必须挂载在
PropagatedMount
插件配置(#26398)中指定的目录下。
1.12.0
1.10.0
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"
}
}
支持的范围是global
和local
。中的任何其他值都Scope
将被忽略并local
使用。Scope
允许集群管理器以不同方式处理卷。例如,范围为global
,向集群管理器发出信号,表明它只需要创建一次卷,而不必在每个Docker主机上创建一次。将来可能会添加更多功能。