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
相关推荐
QC班长5 小时前
Maven公司私库配置踩坑点
java·服务器·maven·intellij-idea
Makoto_Kimur5 小时前
java开发面试-AI Coding速成
java·开发语言
wuqingshun3141595 小时前
说说mybatis的缓存机制
java·缓存·mybatis
空中海6 小时前
Kubernetes 生产实践、可观测性与扩展入门
java·贪心算法·kubernetes
Devin~Y6 小时前
大厂Java面试实录:Spring Boot/Cloud、Kafka、Redis、K8s 与 Spring AI(RAG/Agent)三轮连环问
java·spring boot·redis·mysql·spring cloud·kafka·kubernetes
bLEd RING6 小时前
SpringBoot3.3.0集成Knife4j4.5.0实战
java
小松加哲6 小时前
Spring MVC 核心原理全解析
java·spring·mvc
深色風信子7 小时前
Docker newapi
运维·docker·容器·newapi
Ulyanov7 小时前
《PySide6 GUI开发指南:QML核心与实践》 第二篇:QML语法精要——构建声明式UI的基础
java·开发语言·javascript·python·ui·gui·雷达电子对抗系统仿真
码界筑梦坊7 小时前
357-基于Java的大型商场应急预案管理系统
java·开发语言·毕业设计·知识分享