6.1 数据卷
数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux中的mount操作。
数据卷可以提供很多有用的特性,如下所示:
·数据卷可以在容器之间共享和重用,容器间传递数据将变得高效方便;
·对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;
·对数据卷的更新不会影响镜像,解耦了应用和数据;
·卷会一直存在,直到没有容器使用,可以安全地卸载它。
1.在容器内创建一个数据卷
在用docker run命令的时候,使用-v标记可以在容器内创建一个数据卷。多次重复使用-v标记可以创建多个数据卷。
下面使用training/webapp镜像创建一个web容器,并创建一个数据卷挂载到容器的/webapp目录:
- $ docker run -d -P --name web -v /webapp training/webapp python app.py
注意
-P是将容器服务暴露的端口,是自动映射到本地主机的临时端口。
2.挂载一个主机目录作为数据卷
使用-v标记也可以指定挂载一个本地的已有目录到容器中去作为数据卷(推荐方式)。
- $ docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
上面的命令加载主机的/src/webapp目录到容器的/opt/webapp目录。
这个功能在进行测试的时候十分方便,比如用户可以将一些程序或数据放到本地目录中,然后在容器内运行和使用。另外,本地目录的路径必须是绝对路径,如果目录不存在Docker,会自动创建。
Docker挂载数据卷的默认权限是读写(rw),用户也可以通过ro指定为只读:
- $ docker run -d -P --name web -v /src/webapp:/opt/webapp:ro
- training/webapp python app.py
加了:ro之后,容器内对所挂载数据卷内的数据就无法修改了。
3.挂载一个本地主机文件作为数据卷
-v标记也可以从主机挂载单个文件到容器中作为数据卷(不推荐)。
- $ docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
这样就可以记录在容器输入过的命令历史了。
注意
如果直接挂载一个文件到容器,使用文件编辑工具,包括vi或者sed—in-place的时候,可能会造成文件inode的改变,从Docker 1.1.0起,这会导致报错误信息。所以推荐的方式是直接挂载文件所在的目录。
