为什么需要数据卷
docker镜像是分层的,docker镜像是由多个只读层(read-only layer)叠加而成。当我们运行一个容器时,docker加载只读的镜像,和在最顶层加载一个读写层(read-write layer)。在一个运行的容器中修改文件,该文件从只读层复制到最顶部的读写层,修改是作用在读写层的新文件,没有作用到只读层的原文件,读写层隐藏了下层的原文件,原文件仍然保留着原来的样子。
当容器被删除后,基于相同的镜像创建新的容器,这时候是一个新的读写层,原来位于旧读写层的修改已经被丢弃了。

为了持久化数据和在容器间共享数据,docker提供了数据卷(Volumn)。简单来说,数据卷是独立于容器,存在于宿主文件系统中的目录或文件。

Docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器挂载的数据卷进行处理。
使用方法
- 创建一个数据卷 - $ docker volume create vol
- 查看所有数据卷 - $ docker volume ls DRIVER VOLUME NAME local vol
- 查看指定的数据卷信息 - $ docker volume inspect vol [ { "CreatedAt": "2020-04-16T00:06:39Z", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/vol/_data", "Name": "vol", "Options": {}, "Scope": "local" } ]
- 使用--mount将数据卷挂载到容器里 - $ docker run --rm --name web --mount source=vol,target=/app -it ubuntu bin/bash
- 挂载一个主机目录作为数据卷 - 使用 - --mount可以挂载一个宿主机的目录到容器中。- $ docker run --rm --name web --mount type=bind,source=/tmp,target=/tmp -it ubuntu bin/bash- 可以看到在容器和宿主机分别创建文件,文件在容器和宿主机都是可见的。  
  

