在生产环境中使用Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作。
容器中的管理数据主要有两种方式:
1、数据卷( Data Volumes):容器内数据直接映射到本地主机环境;
2、数据卷容器( Data Volume Containers):使用特定容器维护数据卷。
数据卷(Data Volumes)是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux中的mount行为。
数据卷可以提供很多有用的特性:
1、数据卷可以在容器之间共享和重用,容器间传递数据将变得高效与方便;
2、对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;
3、对数据卷的更新不会影响镜像,解耦开应用和数据;
4、卷会一直存在,直到没有容器使用,可以安全地卸载它。
$docker volume create -d local test
Docker 提供了volume子命令来管理数据卷,可以查看
/var/lib/docker/volumes路径下,新创建的数据卷信息
$ ls -l /var/lib/docker/volumes
关于数据卷的其它命令:
Docker volumes inspect:查看详细信息
Docker volumes ls:列出已有数据卷
Docker volumes prune:清理元用数据卷
Docker volumes rm:删除数据卷
除了使用volume子命令来管理数据卷外,还可以在创建容器时将主机本地的任意路径,挂载到容器内作为数据卷,这种形式创建的数据卷称为绑定数据卷。
在用docker [container] run命令的时候,可以使用-mount选项来使用数据卷
-mount选项支持三种类型的数据卷,包括:
下面使用training/webapp镜像创建一个Web容器,并创建一个数据卷挂载到容器的 /opt/webapp 目录:
$docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py
上述命令等同于使用旧的-V标记可以在容器内创建一个数据卷:
$ docker run -d -P --name web -v /webapp:/opt/webapp training/webapp python app.py
这个功能在进行应用测试的时候十分方便,比如用户可以放置一些程序或数据到本地目录中实时进行更新,然后在容器内运行和使用。
另外,本地目录的路径必须是绝对路径,容器内路径可以为相对路径。如果目录不存在,Docker会自动创建。
Docker挂载数据卷的默认权限是读写(rw),用户也可以通过ro指定为只读:
$ docker run -d -P --name web -v /webapp:/opt/webapp:ro training/webapp python app.py
加 ro之后,容器内对所挂载数据卷内的数据就无法修改了。
如果直接挂载一个文件到容器,使用文件编辑工具,包括vi或者sed、--in-place的时候,可能会造成文件inode的改变。
从Docker 1.1.0起,这会导致报错误信息。所以推荐的方式是直接挂载文件所在的目录到容器内。
留言与评论(共有 0 条评论) |