Docker 卷插件

Docker Engine 卷插件使引擎部署能够与 Amazon EBS 等外部存储系统集成,并使数据卷能够在单个 Docker 主机的生命周期之外持续存在。请参阅 插件文档以获取更多信息。

变更日志

1.13.0

  • PropagatedMount如果用作 v2 插件架构的一部分,作为插件返回的路径一部分的挂载点必须挂载在插件配置中 指定的目录下 ( #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-driverdocker container run--volume-v--volume-driver

$ docker volume create --driver=flocker volumename

$ docker container run -it --volume volumename:/data busybox sh

- 体积

--volume(or )标志-v采用格式为 的值 <volume_name>:<mountpoint>。值的两个部分由冒号 ( :) 字符分隔。

  • 卷名称是人类可读的卷名称,并且不能以字符开头/volume_name本主题的其余部分将引用它。
  • Mountpoint是主机 (v1) 或插件 (v2) 上可用卷的路径。

音量驱动程序

volumedriver与 a 一起指定允许您使用Flockervolumename等插件 来管理单个主机外部的卷,例如 EBS 上的卷。

创建卷驱动程序

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

卷插件协议

如果插件VolumeDriver在激活时将自身注册为 a,则它必须为 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.路径

要求:

{
    "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.Capability

要求:

{}

获取驱动程序支持的功能列表。

驱动程序不需要执行Capabilities。如果未实现,则使用默认值。

回复:

{
  "Capabilities": {
    "Scope": "global"
  }
}

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