【数据卷概念】
1、引言
Docker的镜像是由多个只读的文件系统叠加在一起形成的。当我们在我启动一个容器的时候,docker会加载这些只读层并在这些只读层的上面(栈顶)增加一个读写层。这时如果修改正在运行的容器中已有的文件,那么这个文件将会从只读层复制到读写层。该文件的只读版本还在,只是被上面读写层的该文件的副本隐藏。当删除docker,或者重新启动时,之前的更改将会消失。在Docker中,只读层及在顶部的读写层的组合被称为Union File System(联合文件系统)。
为了很好的实现数据保存和数据共享,Docker提出了Volume这个概念,简单的说就是绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。
2、什么是数据卷
数据卷是一个目录,他帮助宿主机目录映射到容器内目录,方便我们操作容器内的文件,或者方便迁移容器内的数据。
数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性: - 数据卷可以在容器之间共享和重用 - 对数据卷的修改会立马生效 - 对数据卷的更新,不会影响镜像 - 数据卷默认会一直存在,即使容器被删除 Docker中提供了两种挂载方式,-v和-mount。
3、为什么使用数据卷?
Docker的镜像是由一系列的只读层组合而来,当启动一个容器的时候,Docker加载镜像的所有只读层,并在最上层加入一个读写层。这个设计使得Docker可以提高镜像构建、存储和分发的效率,节省了时间和存储空间,然而也存在如下问题。
容器中的文件在宿主机上存在形式复杂,不能在宿主机上很方便的对容器中的文件进行访问
多个容器之间的数据无法共享
当删除容器时,容器产生的数据将丢失
为了解决这些问题,Docker引入了数据卷(volume)机制。volume是存在一个或多个容器中的特定文件或文件夹,这个目录能够独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久提供一下便利。
volume在容器创建时就初始化,在容器运行时就可以使用其中的文件
volume能在不同的容器之间共享和重用
对volume中的数据的操作会马上生效
对volume中数据操作不会影响到镜像本身
volume的生存周期独立于容器的生存周期,即使删除容器,volume仍然会存在,没有任何容器使用的volume也不会被Docker删除
【数据卷简单使用】
#docker volume --help
1.创建数据卷
#实际上不用自己创建,在创建容器时候会自动创建,只需要手动挂载即可
docker volume create mydata
2.查看所有数据卷
docker volume ls
docker volume rm #删除指定数据卷
3.挂载数据卷
docker run -d --name nginx -p 80:80 -v [nginxvolume挂载文件名]:[/usr/share/nginx/html容器目录] nginx:latest
#-v 数据卷名字:容器目录
3.1 匿名挂载
#匿名挂载就是只输入挂载目录,而输入数据卷名,即
docker run -d --name nginx -p 80:80 -v [/usr/share/nginx/html容器目录] nginx:latest
#这时候的数据卷名会是一段字母与数字的组合,一般都需要进行具名挂载,方便我们找到一个卷
3.2 指定路径挂载
#路径挂载可以方便我们把挂载目录指定到我任意目录进行挂载,进行更灵活的管理
docker run -d --name nginx -p 80:80 -v /宿主机目录:[/usr/share/nginx/html容器路径] nginx:latest
4.查看数据卷信息
docker volume inspect nginxvolume
docker volume prune #清除数据卷,删除所有未使用的数据卷
/var/lib/docker/volumes/nginx/nginxvolume/_date映射到nginxvolume数据卷,nginxvolume再映射到容器内的/usr/share/nginx/html目录
- 查看是否有数据卷
docker inspect nginx