【Docker】从零开始:12.容器数据卷
- 1.什么是容器数据库卷
- 2.数据的覆盖问题
- 3.为什么要用数据卷
- 4.Docker提供了两种卷:
- 5.两种卷的区别
- 6.bind mount
- 7.Docker managed volume
- volume 语法
- volume 操作参数
1.什么是容器数据库卷
- 卷 就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性。
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
将docker容器内的数据保存进宿主机的磁盘中。docker 将应用与运行的环境打包成镜像,run后形成容器实例运行 ,但是我们对数据的要求希望是持久化的。
Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。为了能保存数据,在docker中我们使用卷。
2.数据的覆盖问题
如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。
- 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据
- 卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。
3.为什么要用数据卷
- docker分层文件系统
- 性能差
- 生命周期与容器相同
- docker数据卷
- mount到主机中,绕开分层文件系统
- 和主机磁盘性能相同,容器删除后依然保留
- 仅限本地磁盘,不能随容器迁移
4.Docker提供了两种卷:
- bind mount
- Docker managed volume
5.两种卷的区别
6.bind mount
- bind mount 是将主机上的目录或文件mount到容器里。 使用直观高效,易于理解。 使用 -v 选项指定路径,格式 [host path]:[container path]
- bind mount必须指定host文件系统路径,限制了移植性。
docker run --rm -it -v [本地路径]:[Docker内路径] [images]
7.Docker managed volume
- docker managed volume不需要指定mount源,docker自动为容器创建数据卷目录。
- 默认创建的数据卷目录都在/var/lib/docker/volumes中。
- 如果挂载时指向容器内已有的目录,原有数据会被复制到volume中。
- 只能支持目录的挂载,不能支持文件的挂载
docker run --rm -it -v [卷名称]:[Docker内路径] [images]
volume 语法
docker volume [COMMAND]
volume 操作参数
参数 | 说明 |
---|---|
create | 创建卷 |
inspect | 查看卷信息 |
ls | 卷列表 |
prune | 删除没用的卷 |
rm | 删除一个或多个卷 |