docker 创建和使用存储卷相关内容

Docker 存储卷用于持久化数据,可以独立于容器生命周期。

docker 创建存储卷,查看存储卷 ,挂载存储卷,删除存储卷,具体如下:

1️⃣ 创建存储卷

bash 复制代码
# 创建一个名为 my_volume 的存储卷
docker volume create my_volume

其他的参数

bash 复制代码
docker volume create \
  --driver local \   # 使用本地卷驱动
  --label project=demo \  # 添加标签
  my_volume

例如:使用其他机器的存储

bash 复制代码
docker volume create \
   --driver local \
   --opt type=cifs \
   --opt device=//192.168.10.88/share-data \
   --opt "o=username=Administrator,password=123456,domain=domain" \
   share-data

2️⃣ 查看存储卷

查看本地所有存储卷:

bash 复制代码
docker volume ls

输出示例:

bash 复制代码
DRIVER VOLUME NAME
local my_volume
local another_volume

查看某个卷的详细信息:

bash 复制代码
docker volume inspect my_volume

输出示例:

bash 复制代码
[
    {
        "Name": "my_volume",
        "Driver": "local",
        "Mountpoint": "/home/data/docker/volumes/my_volume/share-data",
        "Labels": {
            "project": "demo"
        },
        "Scope": "local"
    }
]

这里 Mountpoint 就是卷在宿主机上的实际路径。


3️⃣ 挂载存储卷

创建容器时挂载卷,使用 -v 或 --mount:

方式 1:简洁写法

bash 复制代码
docker run -it --name my_container -v my_volume:/app/data ubuntu /bin/bash
  • my_volume:存储卷名称
  • /app/data:容器内挂载路径

容器内 /app/data 的数据会持久化到 my_volume。

方式 2:推荐写法(更可读)

bash 复制代码
docker run -it --name my_container \
  --mount source=my_volume,target=/app/data \
  ubuntu /bin/bash

建议在生产环境使用 --mount 方式,语义更清晰。

如果需要将存储卷挂载到正在运行的容器中,可以通过 docker commit 和 docker run 组合实现,因为直接修改运行中容器的挂载点较为复杂。

停止当前容器(假设容器名为 my_container):

bash 复制代码
docker stop my_container

提交容器为新的镜像:

bash 复制代码
docker commit my_container my_new_image

基于新镜像重新运行容器,并挂载存储卷:

bash 复制代码
docker run -d --name my_new_container -v my_volume:/path/in/container my_new_image

直接创建并挂载存储卷到新容器

如果是新容器,可以直接在运行命令中创建并挂载存储卷:

bash 复制代码
docker run -d --name my_container -v my_volume:/path/in/container my_image

验证挂载是否成功

进入容器查看挂载点:

bash 复制代码
docker exec -it my_container ls /path/in/container

使用绑定挂载(Bind Mount)

如果需要挂载主机目录而非 Docker 管理的存储卷,可以使用绑定挂载:

bash 复制代码
docker run -d --name my_container -v /host/path:/container/path my_image

4️⃣ 删除存储卷

注意:删除卷会清除卷内所有数据。

查看卷是否在使用

bash 复制代码
docker ps -a --filter volume=my_volume

确保没有容器正在使用这个卷。

删除卷

bash 复制代码
docker volume rm my_volume

删除所有未使用的卷(谨慎):

bash 复制代码
docker volume prune

🔹 总结操作流程

  1. 创建卷:docker volume create my_volume
  2. 查看卷:docker volume ls / docker volume inspect my_volume
  3. 挂载卷:docker run -v my_volume:/app/data 或 --mount source=my_volume,target=/app/data
  4. 删除卷:docker volume rm my_volume / docker volume prune
相关推荐
学长毕设4 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
zzu123zsw5 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
源码集结号6 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
论文复现现场6 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
啃瓜子的松鼠7 小时前
泛微OAe9-后端二开异步调用
java
秋天的怀念_David7 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
外收内放7 小时前
Python基础语法练习题(73)
java·前端·python
Wang's Blog8 小时前
Java 项目实战: 交友项目 - 环信后台发送消息测试
java·交友
用户3721574261358 小时前
Java 操作 Word 脚注和尾注:添加、读取与删除
java
小嘉丶学长8 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节