容器数据卷
什么是容器数据卷: 将应用和环境打包成一个镜像!
数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化
MySQL,容器删了,删库跑路!需求:MySQL数据可以存储在本地!
容器之间可以有一个数据共享技术!Docker容器中产生的数据,同步到本地!
这就是卷技术,目录的挂载,将我们容器内的目录挂载到linux目录上面!

总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的
使用数据卷
方式一:直接使用命令来挂载-v
bash
docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口
#/ubuntu/ceshi:主机ubuntu目录下的ceshi文件夹 映射:ubuntu容器中的/home
#注:如果ubuntu下没有ceshi文件夹,将会自动创建,并且由root创建
ubuntu@Mystpet:/home$ docker run -it -v ~/ceshi:/home ubuntu /bin/bash
#这时候主机的/ubuntu/ceshi文件夹就和容器的/home文件夹关联了,二者可以实现文件或数据同步了
#通过docker inspect 容器id 查看
ubuntu@Mystpet:/home$ docker inspect b1a
测试文件的同步(在主机上改动,观察容器变化)

再来测试:
- 停止容器
- 主机上修改文件
- 启动容器
- 容器内的数据依旧是同步的
好处:
我们以后修改只需要在本地修改即可,容器内会自动同步!
即使删除容器我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能。
匿名和具名挂载
bash
#匿名挂载
docker run -d -P --name nginx01 -v /etc/nginx nginx
-v 容器内路径
-P 随机指定端口
#查看所有volume的情况
ubuntu@Mystpet:~$ docker volume ls
DRIVER VOLUME NAME #容器内的卷名(匿名卷挂载)
local 5e5e6e21fa5f59292589a3517f27f6e274ce4ca5f4d02e8ffe53f02adfe040ac
local 7b3c1807fd8293e5724c28845e135464a5544b1ffaadd5d72ea11e94a973bed7
#这里发现,这种情况就是匿名挂载,我们在-v后面只写了容器内的路径,没有写容器外的路径
#具名挂载 -P:表示随即映射端口
ubuntu@Mystpet:~$ docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
ubuntu@Mystpet:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9638432745cc nginx "/docker-entrypoint.…" 6 seconds ago Up 4 seconds 0.0.0.0:32768->80/tcp, [::]:32768->80/tcp nginx02
#查看所有的volume的情况
ubuntu@Mystpet:~$ docker volume ls
DRIVER VOLUME NAME
local d22ecba4c4f0237d1ef4395c9e07d87dcfd576cd4d452f38069c13cc786e737d
local juming-nginx #多了一个名字
#通过-v卷名:容器内的路径
#查看一下这个卷
ubuntu@Mystpet:~$ docker volume inspect juming-nginx
[
{
"CreatedAt": "2026-03-22T01:29:26+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",#默认目录
"Name": "juming-nginx",
"Options": null,
"Scope": "local"
}
]所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/自定义的卷名/_data下,
如果指定了目录,docker volume ls 是查看不到的。
我们通过具名挂载可以方便的找到我们的一个卷,大多数情况下使用的是具名挂载
区分三种挂载方式
bash
# 三种挂载: 匿名挂载、具名挂载、指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载 docker volume ls 是查看不到的拓展:
bash
# 通过 -v 容器内容路径 ro rw 改变读写权限
ro readonly # 只读
rw readwrite # 可读可写
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
# ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内容无法操作