本地卷管理
概述
iSula 管理的容器销毁后,容器内自身所有的数据都会被销毁。如果用户希望容器销毁后依然保留数据,则需要有一种持久化数据的机制。iSula 允许将主机上的文件、目录或卷在容器运行时挂载到容器内。用户可以将需要持久化的数据写入容器内的挂载点。则容器销毁后,主机上的文件、目录、卷依然保留。如果用户需要销毁主机上的文件、目录、卷,可以手动删除文件、目录或者执行 iSula 的相关命令删除卷。对于卷的管理目前 iSula 只支持本地卷,本地卷又分为有名卷和匿名卷。由用户指定名称生产的卷叫有名卷,用户没有指定卷名称,由 iSula 自动生成卷名(一个64位的随机数)的卷为匿名卷。
本章介绍通过 iSula 管理本地卷的使用方法。
注意事项
- 卷名称长度2-64个字符,符合正则表达式:^[a-zA-Z0-9][a-zA-Z0-9.-]{1,63}$,即卷名称首字符必须为字母或者数字,从第二个字符开始可以为字母、数字或者”“、”.“、”-“这几个字符。
- 创建容器时,如果卷对应的容器内的挂载点存在数据,则默认会拷贝到卷里。如果拷贝过程中出现了 iSula 崩溃重启或者系统掉电之类的异常,则卷内的数据可能是不完整的,这时需要手动删除卷或者卷内数据,确保数据的正确完整。
使用方法
使用-v参数挂载数据
命令格式
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 目录,同时配置挂载点为只读,并且如果容器中对应挂载点有数据也不进行拷贝。
isula run -v vol:/vol:ro,nocopy busybox
使用–mount参数挂载数据
命令格式
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 目录,同时配置挂载点为只读,并且如果容器中对应挂载点有数据也不进行拷贝。
isula run --mount type=volume,src=vol,dst=/vol,ro=true,volume-nocopy=true busybox
复用其他容器中的挂载配置
命令格式
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 目录。
isula run --volumes-from container1 --volumes-from container2 busbyox
使用镜像中的匿名卷
使用镜像中的匿名卷不需要用户做任何配置。如果镜像中配置了匿名卷,则在运行容器时 iSula 会自动创建一个匿名卷并挂载到镜像中指定的路径供用户使用。用户可以往容器中的匿名卷挂载点写入数据进行数据持久化。
卷的查询
命令格式
isula volume ls [OPTIONS]
功能描述
查询 iSula 管理的所有卷。
参数说明
OPTIONS 可选参数: - -q,–quit: 如果不加这个参数,默认只会查询到卷的驱动信息和卷的名称,添加该参数表示只查询卷的名称。
示例
查询 iSula 管理的所有卷,只返回卷名称。
isula volume ls -q
卷的删除
命令格式
isula volume rm [OPTIONS] VOLUME [VOLUME...]
isula volume prune [OPTIONS]
功能描述
- rm 命令:删除指定的卷,如果卷被容器使用了,则会删除失败。
- prune 命令:删除所有未被容器使用的卷。
参数说明
prune 命令的 OPTIONS 可选参数: - -f,–force: 表示不弹出“确认是否要删除”的提示,默认会有风险提示,需要输入 y 才能继续执行。
示例
删除卷 vol1 和卷 vol2
isula volume rm vol1 vol2
删除所有未被使用的卷,不弹出风险提示,格式如下:
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 中 |