数据卷介绍
- 宿主机无法直接访问容器中的文件
- 容器中的文件没有持久化,导致容器删除后,文件数据也随之消失
- 容器之间无法直接访问相互的文件
为解决这些问题,docker加入了数据卷(volumes)机制,能很好解决上面问题,以实现:
- 容器与主机之间,容器与容器之间共享文件
- 容器中的数据持久化
- 将容器中的数据备份,迁移,恢复等
数据卷特点
- 数据卷存在宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。
- 数据卷可以目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换
- 容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中
- 容器对数据卷的修改是实时进行的
- 数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会有相互影响
数据卷的挂载方式(三种)
- bind mounts:将宿主机上的一个文件或目录被挂载到容器上
- volumes:由Docker创建和管理。使用docker volume命令管理
- tmpfs mounts:tmpfs 是一种基于内存的临时文件系统。tmpfs mounts 数据不会存储在磁盘上
bind mounts挂载
利用docker run/create d的参数为容器进行挂载数据卷
用法:
- 方式一:
- -v, --volume list
- -v 宿主机文件路径:容器中的文件路径
- 方式二:
- --mount
- --mount type=bind, src=宿主机路径, dst=容器路径
- 注意:
- src指定的文件或者路径必须存在
volumes挂载
利用docker run/create为容器挂载数据卷
用法:
- 方式一:
- -v, --volume参数
- -v VOLUME-NAME:容器中的文件或者文件夹路径
- 方式二:
- --mount 参数
- --mount type=volume, src=VOLUME-NAME, dst=容器中的文件或者文件夹路径
- volume对象管理:
- docker volume 命令管理volume数据卷对象
- docker volume create 创建数据卷对象
- docker volume inspect 查看数据卷详细信息
- docker volume ls 查看已创建的数据卷对象
- docker volume prune 删除未被使用的数据卷对象
- docker volume rm 删除一个或多个数据卷对象
tmpfs mount挂载
利用docker run/create为容器挂载数据卷
用法:
--mount type=tmpfs, dst=PATH
共享其他容器的数据卷
利用docker run/create 的--volumes-from参数指定数据卷容器
用法:
docker run/create --volumes-from CONTAINER
数据卷使用注意项
- 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。
- 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。
- 这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。