简介
在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中。为了能保存数据在docker中我们使用卷。

目的:卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
特点:
- 数据卷可在容器之间共享或重用数据
- 卷中的更改可以直接生效
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
实践效果
挂载
dockerq启动mysql
docker pull mysql:5.7.35
docker run --name -it wyt-mysql -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7.35
mysql -uroot -proot -h 192.168.2.248 -P 3307
#进入容器的数据库
create database wyt;
exit
查看挂载信息
docker stop wyt-mysql
docker start wyt-mysql
#关闭容器,再打开,远程容器数据库可以看到wyt数据还在
docker container inspect wyt-mysql|grep -C 10 Mounts
#看到有挂载信息

所以容器有一套机制可以实现数据的持久化。使用卷把数据挂载到宿主机。
dockerq启动nginx
docker pull nginx
docker run --name nginx-1 -d -p 8080:80 nginx
docker exec -it nginx-1 /bin/bash
#进入容器
cd /usr/share/nginx/html
echo 'wangyutao' >index.html
浏览器访问192.168.2.248::8080,nginx主页变为wangyutao 启动第二个nginx容器
mkdir /root/web
vim /root/web/index.html
>wangyutao
docker run --name nginx-2 -d -p 8081:80 -v /root/web/:/usr/share/nginx/html nginx
#-v选项挂载宿主机中的web页面到容器,并启动
#浏览器访问192.168.2.248:8081,nginx主页为wangyutao

卷(Volume)的引入
docker volume ls
#列出所有卷
docker volume create wyt
#创建卷wyt
cd /var/lib/docker/volumes/
#挂载卷的目录,可以看到所有卷
cp /root/web/index.html /var/lib/docker/volumes/wyt/_data
#复制之前创建的挂载文件到卷目录下
docker volume inspect wyt
#查看卷的详细信息
docker run --name nginx-3 -d -p 8082:80 --mount source=wyt,target=/usr/share/nginx/html nginx
#开启容器nginx-3,使用卷wyt
浏览器访问192.168.2.248:8082,内容是wangyutao 如果不再使用自定义数据卷了,那么可以手动清理
docker stop nginx-3
#暂停容器实例
docker rm nginx-3
#移除容器实例
docker volume rm wyt
#删除自定义数据卷
多容器也可以共享同一个卷