概念
- 卷就是目录或者文件,存在于一个或者多个容器中,由 docker 挂载到容器,但不属于联合文件系统,因此能够绕过 Union File System 提供一些用于持续存储或者共享数据的特性
- 目的是将数据持久化,完全独立于容器的生存周期,将 docker 容器内的数据保存进宿主机的磁盘中,因此 docker 不会再容器删除时删除其挂载的数据卷
- 类似于 redis 的 AOF、RDB文件实现持久化
特点
- 数据卷可在容器之间共享或者重用数据
- 卷中的更改可以直接实时生效(主机上的更改同步到容器中、容器的更改同步到主机中、容器挂掉主机上的更改也会同步到容器中)
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
操作
含义 | 命令 |
---|---|
运行一个带有数据卷的实例 | docker run -it --name="persistent_ubuntu" --privileged=true -v /tmp/host_data:/tmp/docker_data ubuntu |
查看数据卷是否挂载成功 | docker inspect 容器ID |
读写规则
含义 | 命令 |
---|---|
默认情况下是读写 rw | docker run -it --name="persistent_ubuntu" --privileged=true -v /tmp/host_data:/tmp/docker_data:rw ubuntu |
主机可读可写,容器内部限制,容器内只能读不能写 ro(read only) | docker run -it --name="persistent_ubuntu" --privileged=true -v /tmp/host_data:/tmp/docker_data:ro ubuntu |
容器卷之间的继承
- 继承的是挂载的规则(目录)、两个容器之间相互独立,父容器挂掉也不会影响子容器
- 两个容器共享一个挂载目录
含义 | 命令 |
---|---|
继承已有映射 | docker run -it --privileged=true --volumes-from persistent_ubuntu --name="inherit_presistent_ubuntu" ubuntu |