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 commitdocker 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
相关推荐
我叫张土豆7 小时前
V100 显卡部署 Qwen3-ASR-1.7B 语音识别模型(vLLM + Docker 完整教程)
docker·语音识别·vllm
真上帝的左手7 小时前
11. 容器化 vs 虚拟化-K8s-工作负载实战
云原生·容器·kubernetes
可乐ea7 小时前
【知识获取与分享社区项目 | 项目日记第 21 天】索引构建与联想建议:Outbox 增量更新 + Completion Suggester
java·大数据·mysql·elasticsearch·搜索引擎
RainCity7 小时前
Java Swing 自定义组件库分享(十一)
java·笔记·后端
好家伙VCC7 小时前
Qdrant + LangChain 实战:构建毫秒级语义检索服务
java·langchain
AI人工智能+电脑小能手7 小时前
【大白话说Java面试题 第93题】【Mysql篇】第23题:从查找速度来看,聚集索引和非聚集索引哪个更快?
java·开发语言·数据库·mysql·面试
摇滚侠7 小时前
JDBC 基础到高级一套通关!高级篇 28-40
java
Smoothcloud润云8 小时前
5大功能精修,重构AI算力使用体验!
java·人工智能·windows·算法·重构·编辑器·sublime text
我是唐青枫8 小时前
Java MyBatis-Flex 实战指南:从 BaseMapper 到 QueryWrapper 的轻量 ORM 用法
java·开发语言·mybatis
顺风尿一寸8 小时前
Java Native 方法底层原理深度解析:从 JNI 注册到 Native Wrapper 生成
java