本地卷管理

概述

iSula 管理的容器销毁后,容器内自身所有的数据都会被销毁。如果用户希望容器销毁后依然保留数据,则需要有一种持久化数据的机制。iSula 允许将主机上的文件、目录或卷在容器运行时挂载到容器内。用户可以将需要持久化的数据写入容器内的挂载点。则容器销毁后,主机上的文件、目录、卷依然保留。如果用户需要销毁主机上的文件、目录、卷,可以手动删除文件、目录或者执行 iSula 的相关命令删除卷。对于卷的管理目前 iSula 只支持本地卷,本地卷又分为有名卷和匿名卷。由用户指定名称生产的卷叫有名卷,用户没有指定卷名称,由 iSula 自动生成卷名(一个64位的随机数)的卷为匿名卷。

本章介绍通过 iSula 管理本地卷的使用方法。

注意事项

  • 卷名称长度2-64个字符,符合正则表达式:^[a-zA-Z0-9][a-zA-Z0-9.-]{1,63}$,即卷名称首字符必须为字母或者数字,从第二个字符开始可以为字母、数字或者”“、”.”、”-“这几个字符。
  • 创建容器时,如果卷对应的容器内的挂载点存在数据,则默认会拷贝到卷里。如果拷贝过程中出现了 iSula 崩溃重启或者系统掉电之类的异常,则卷内的数据可能是不完整的,这时需要手动删除卷或者卷内数据,确保数据的正确完整。

使用方法

使用-v参数挂载数据

命令格式

  1. isula run -v [SRC:]DST[:MODE,MODE...] IMAGE

功能描述

使用 create / run 创建并运行容器时,使用 -v/—volume 参数将主机上的文件、目录或者卷挂载到容器内用于数据持久化。

参数说明

  • SRC: 用于挂载的文件、目录或者卷在主机上的路径,当值为绝对路径时,表示挂载主机上的文件或者文件夹。当值为卷名时,表示挂载卷。当省略该项时,表示挂载匿名卷。当文件夹或者卷不存在时,iSula会先创建一个新的文件夹/卷,再进行挂载操作。
  • DST: 容器内的挂载路径,必须为绝对路径。
  • MODE: 当挂载的源是目录或者文件时,合法的参数是ro/rw/z/Z/private/rprivate/slave/rslave/shared/rshared。同类型的参数只能配置一个。当挂载的源是卷时,合法的参数是ro/rw/z/Z/nocopy,同类型的参数只能配置一个。多个属性之间使用”,”连接。参数含义如下:
参数 参数含义
ro 容器内挂载点挂载为只读属性
rw 容器内挂载点挂载为读写属性
z 如果开启了SELinux,则挂载时添加SELinux共享标签
Z 如果开启了SELinux,则挂载时添加SELinux私有标签
private 容器内挂载点挂载为私有传播属性
rprivate 容器内挂载点递归挂载为私有传播属性
slave 容器内挂载点挂载为从属传播属性
rslave 容器内挂载点递归挂载为从属传播属性
shared 容器内挂载点挂载为共享传播属性
rshared 容器内挂载点递归挂载为共享传播属性
nocopy 不拷贝挂载点内的数据,该参数不进行配置时默认会拷贝数据。另外,如果卷里已经有数据了,也不会进行拷贝

示例

基于 busybox 运行容器并创建/挂载名称为 vol 的卷到容器的 /vol 目录,同时配置挂载点为只读,并且如果容器中对应挂载点有数据也不进行拷贝。

  1. isula run -v vol:/vol:ro,nocopy busybox

使用—mount参数挂载数据

命令格式

  1. isula run --mount [type=TYPE,][src=SRC,]dst=DST[,KEY=VALUE] busybox

功能描述

使用 create / run 创建并运行容器时,使用 —mount 参数将主机上的文件、目录、卷或者文件系统挂载到容器内用于数据持久化。

参数说明

  • type: 挂载到容器中的数据的类型,类型可以是 bind、volume、squashfs, 省略该项时默认为volume类型。
  • src: 用于挂载的文件、目录或者卷在主机上的路径。当值为绝对路径时,表示挂载主机上的文件或者目录。当值为卷名时,表示挂载卷。当省略该项时,表示匿名卷。当文件夹或者卷不存在时,iSula会先创建一个新的文件/卷,再进行挂载操作。该项的关键字 src 也可以写成 source。
  • dst: 容器内的挂载路径,必须为绝对路径。该项的关键字 dst 也可以写成 destination 或者 target。
  • KEY=VALUE: 表示 —mount 的参数,可以取如下值:
KEY 值 VALUE
selinux-opts/bind-selinux-opts z或者Z。z表示如果开启了SElinux,则挂载时添加SElinux共享标签;Z表示如果开启了SElinux,则挂载时添加SElinux私有标签
ro/readonly 0/false 表示挂载成读写属性,1/true 表示挂载成只读属性。该项的值可以省略表示挂载成只读。该项只在 type=bind 时支持配置该参数
volume-nocopy 不拷贝挂载点内的数据,该参数不进行配置时默认会拷贝数据。另外,如果卷里已经有数据了,也不会进行拷贝。只在 type=volume 时支持该参数

示例

基于 busybox 运行容器并创建/挂载名称为 vol 的卷到容器的 /vol 目录,同时配置挂载点为只读,并且如果容器中对应挂载点有数据也不进行拷贝。

  1. isula run --mount type=volume,src=vol,dst=/vol,ro=true,volume-nocopy=true busybox

复用其他容器中的挂载配置

命令格式

  1. isula run --volumes-from CON1[:MODE] busybox

功能描述

使用 create / run 创建并运行容器时,使用 —volumes-from 参数表示挂载点配置包括CON1容器的挂载点配置。可以配置多个 —volumes-from 参数。

参数说明

  • CON1: 被复用挂载点的容器的名称或者ID。
  • MODE: 值为ro表示复用的挂载点挂载为只读属性,值为rw表示复用的挂载点挂载为读写属性。

示例

假设已经有名称为 container1 的容器配置了卷 vol1 到容器目录 /vol1,名称为 container2 的容器配置了卷 vol2 到容器目录 /vol2。现在运行一个新的容器复用 container1 和 container2 的挂载配置,即卷 vol1 挂载到容器的 /vol1 目录,vol2 挂载到容器的 /vol2 目录。

  1. isula run --volumes-from container1 --volumes-from container2 busbyox

使用镜像中的匿名卷

使用镜像中的匿名卷不需要用户做任何配置。如果镜像中配置了匿名卷,则在运行容器时 iSula 会自动创建一个匿名卷并挂载到镜像中指定的路径供用户使用。用户可以往容器中的匿名卷挂载点写入数据进行数据持久化。

卷的查询

命令格式

  1. isula volume ls [OPTIONS]

功能描述

查询 iSula 管理的所有卷。

参数说明

OPTIONS 可选参数:

  • -q,—quit: 如果不加这个参数,默认只会查询到卷的驱动信息和卷的名称,添加该参数表示只查询卷的名称。

示例

查询 iSula 管理的所有卷,只返回卷名称。

  1. isula volume ls -q

卷的删除

命令格式

  1. isula volume rm [OPTIONS] VOLUME [VOLUME...]
  2. isula volume prune [OPTIONS]

功能描述

  • rm 命令:删除指定的卷,如果卷被容器使用了,则会删除失败。
  • prune 命令:删除所有未被容器使用的卷。

参数说明

prune 命令的 OPTIONS 可选参数:

  • -f,—force: 表示不弹出“确认是否要删除”的提示,默认会有风险提示,需要输入 y 才能继续执行。

示例

删除卷 vol1 和卷 vol2

  1. isula volume rm vol1 vol2

删除所有未被使用的卷,不弹出风险提示,格式如下:

  1. isula volume prune -f

注意事项

冲突合并规则

如果卷的挂载点有冲突,则按照如下规则处理:

  • -v 和 —mount 的配置冲突,则返回失败。
  • —volumes-from 里获取的配置,如果和 -v/—mount 配置有冲突,则丢弃。
  • 镜像中的匿名卷配置,如果和 -v/—mount/—volumes-from 配置有冲突,则丢弃。

iSula和Docker的差异

iSula行为 Docker行为
卷名称最长64个字符 卷名称长度没有限制
—mount 参数,如果挂载的源不存在,则会创建 —mount 参数,如果挂载的源不存在,则会报错
—mount 参数,支持 bind-selinux-opts 和 selinux-opts 参数配置 z/Z —mount 参数,不支持 bind-selinux-opts 和 selinux-opts 参数
挂载点冲突合并规则,不做特殊处理 挂载点冲突合并规则,将 -v 指定的匿名卷当成镜像中的匿名卷一样处理
volume prune 命令,提示回收了多少空间 volume prune 命令,不会提示回收了多少空间
-v/—mount/—volumes-from 配置在 hostconfig 中,匿名卷配置在 config 中 -v 配置的匿名卷放在 config 配置中,其他配置在 hostconfig 中