数据卷
数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux中的mount
操作。
数据卷可以提供很多有用的特性,如下所示:
- 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效方便;
- 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;
- 对数据卷的更新不会影响到镜像,解耦了应用和数据;
- 卷会一直存在,直到没有容器使用它,可以安全地卸载它。
- 在容器内创建一个数据卷
可以通过docker run
命令的-v
参数在容器内创建一个或多个数据卷,下面使用 training/webapp 镜像创建一个web容器,并创建一个数据卷挂载到容器的 /webapp 目录:
docker run -d -v /webapp training/webapp python app.py
- 挂载一个主机目录作为数据卷
使用-v
也可以指定挂载一个本地的已有目录到容器中去作为数据卷(推荐方式)。
docker run -d -v /src/webapp:/opt/webapp \
training/webapp python app.py
注意:本地目录必须是绝对路径,如果目录不存在,Docker会自动创建。
Docker挂载的数据卷的默认权限是读写(rw),用于也可以通过ro指定为只读:
docker run -d -v /src/webapp:/opt/webapp \
training/webapp:ro python app.py
- 挂载一个本地主机文件作为数据卷
-v
也可以从主机挂载单个文件到容器中作为数据卷(不推荐)。
docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu bash
这样就可以记录在容器输入过的命令历史了。
数据卷容器
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但它的目的是专门用来提供数据卷供其他容器挂载。
首先,创建一个数据卷容器dbdata,并在其中创建一个数据挂载到/dbdata:
docker run -it -v /dbdata --name dbdata ubuntu
然后,可以在其它容器中使用--volumes-from
来关注dbdata容器中的数据卷:
docker run -it --volumes-from dbdata --name db1 ubuntu
docker run -it --volumes-from dbdata --name db2 ubuntu
注意:使用 --volumes-from 参数所挂载数据卷的容器自身并不需要保持在运行状态
如果删除了挂载的容器(包含dbdata、db1和db2),数据卷并不会被自动删除。如果想要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用docker rm -v
命令来指定同时删除关联的容器。
利用数据卷容器来迁移数据
可以利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移。
- 备份
使用下面的命令来备份dbdata数据卷容器内的数据:
docker run --volumes-from dbdata -v ${pwd}:/backup --name \
worker ubuntu tar cvf /backup/backup.tar /dbdata
- 恢复
docker run --volumes-from dbdata -v ${pwd}:/backup ubuntu \
tar xvf /backup/backup.tar
网友评论