Docker 卷插件
Docker Engine卷插件使Engine部署能够与外部存储系统(例如Amazon EBS)集成,并使数据卷能够在单个Docker主机的生命周期之外持久存在。有关更多信息,请参阅插件文档。
变更日志
1.13.0
- 如果用作v2插件架构的一部分,则作为插件返回的路径一部分的挂载点必须挂载在插件配置中指定的目录下(#26398)。
1.12.0
1.10.0
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
结合使用volumedriver
和volumename
允许你使用插件,例如Flocker来管理单个主机外部的卷,例如EBS上的卷。
创建VolumeDriver
容器创建端点(/containers/create
)接受类型为string
的VolumeDriver
字段,允许指定驱动程序的名称。如果
卷插件协议
如果插件在激活时将自身注册为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": "" }
如果发生错误,则返回一个字符串错误。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 主机上创建。