Skip to content
DAILY QUOTE

“ ”

容器数据卷

什么是容器数据卷: 将应用和环境打包成一个镜像!

数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化

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

测试文件的同步(在主机上改动,观察容器变化)

再来测试:

  1. 停止容器
  2. 主机上修改文件
  3. 启动容器
  4. 容器内的数据依旧是同步的

好处:

我们以后修改只需要在本地修改即可,容器内会自动同步!

即使删除容器我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能。

匿名和具名挂载

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就说明这个路径只能通过宿主机来操作,容器内容无法操作