news 2026/8/15 11:12:07

Docker数据卷

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker数据卷

卷技术即目录的挂载,就是将容器内的目录,挂载到Linux上面!

容器数据卷

用于容器的持久化和同步操作,容器和系统之间数据共享,容器之间的数据也可以共享(即数据卷容器)

  • 容器之间的数据共享,父容器删除不会影响到其他容器的数据
  • 容器数据共享到主机本地,容器删除不会影响到本地的数据

实现办法1:

通过镜像启动容器时,使用docker run命令添加-v参数关联目录操作,3种方式如下。

指定路径挂载:-v 本地目录:容器内目录

匿名挂载:-v 容器内目录容器数据卷的默认路径挂载

docker run -d -P --name nginx01 -v /ect/nginx nginx

具名挂载:-v 卷名:容器内目录容器数据卷的默认路径挂载(常用于生产环境)

docker run -d -P --name nginx01 -v nginx996:/ect/nginx nginx

注意:

  • 具名挂载和匿名挂载默认主机路径 /var/lib/docker/volumes/
  • 匿名挂载和具名挂载会产生“卷”,通过docker volume可查看卷名
  • 通过 -v 挂载容器数据卷时,路径后可添加ro(只读)或rw(可读写)改变挂载目录的读写权限,ro表示该路径仅可以通过宿主机操作,容器内部无权限操作,例如 docker run -d -v /home/ceshi:/etc/nginx:ro nginx
[root@localhost gao]# mkdir -p /home/ceshi/tomcat [root@localhost gao]# ls Desktop Documents Downloads Music Pictures Public Templates Videos [root@localhost gao]# cd /home [root@localhost home]# ls ceshi gao
[root@localhost home]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat2.00 1.0 0ad8e3ecec7e 27 hours ago 422MB nginx latest 99133eed2307 3 days ago 161MB portainer/portainer-ce latest 2ad8d683056c 2 weeks ago 183MB tomcat latest a76ed56adf24 3 weeks ago 416MB kibana 7.6.2 f70986bc5191 5 years ago 1.01GB elasticsearch 7.6.2 f29a1ee41030 5 years ago 791MB [root@localhost home]# docker run -it -p 8080:8080 tomcat2.00:1.0 Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /opt/java/openjdk Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Using CATALINA_OPTS: 14-Mar-2026 13:42:45.647 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/11.0.18 14-Mar-2026 13:42:45.651 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: J
[root@localhost gao]# docker exec -it 95a6305b45f2 /bin/bash root@95a6305b45f2:/usr/local/tomcat# ls bin conf filtered-KEYS LICENSE native-jni-lib README.md RUNNING.txt upstream-KEYS webapps.dist BUILDING.txt CONTRIBUTING.md lib logs NOTICE RELEASE-NOTES temp webapps work
[root@localhost home]# docker run -it -v /home/ceshi/tomcat:/usr/local/tomcat tomcat2.00:1.0 /bin/bash root@28904bc70413:/usr/local/tomcat# exit exit [root@localhost home]# cd /home/ceshi/tomcat [root@localhost tomcat]# ls #执行完挂载命令并退出容器后,/home/ceshi/tomcat 目录为空是正常现象(核心原因是「空主机目录挂载会覆盖容器目录」)

执行-v /home/ceshi/tomcat:/usr/local/tomcat时:

  1. 主机/home/ceshi/tomcat新建的空目录
  2. Docker 挂载的规则是:主机目录会覆盖容器内对应的目录(空主机目录 → 容器/usr/local/tomcat也变成空);
  3. 进入容器后直接exit,没有往容器目录里写数据,所以主机目录也为空。
[root@localhost tomcat]# docker run -it -v /home/ceshi/tomcat:/usr/local/tomcat tomcat2.00:1.0 /bin/bash root@8e87ebaaa009:/usr/local/tomcat#
[root@localhost gao]# cd /home/ceshi/tomcat [root@localhost tomcat]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS MES 8e87ebaaa009 tomcat2.00:1.0 "/bin/bash" 43 seconds ago Up 43 seconds 8080/tcp ughing_shirley 6e18007d191d portainer/portainer-ce:latest "/portainer" 2 days ago Up 8 hours 8000/tcp, 9443/tcprtainer [root@localhost tomcat]# docker inspect 8e87ebaaa009 [ { "Id": "8e87ebaaa009646dc2f7d916567348385b95b3bc6c5078800592c20a6bf19f0d", "Created": "2026-03-14T14:26:40.333726836Z", "Path": "/bin/bash", "Args": [], "Mounts": [ { #挂载 -v卷 "Type": "bind", "Source": "/home/ceshi/tomcat",#主机内地址 "Destination": "/usr/local/tomcat",#docker容器内地址 "Mode": "", "RW": true, "Propagation": "rprivate" } ],

同步过程;双向绑定

[root@localhost tomcat]# docker start 8e87ebaaa009 8e87ebaaa009 [root@localhost tomcat]# docker attach 8e87ebaaa009 root@8e87ebaaa009:/usr/local/tomcat# ls test.py root@8e87ebaaa009:/usr/local/tomcat# cat test.py print("hello,world")

实现方法2:

DockerFile构建镜像时直接挂载。

数据卷容器

实现容器和容器之间的数据共享,注意是整体数据的共享(类似于整体备份,不是作用于某单个路径),被挂载的被称为父容器,父容器就是数据卷容器,父容器被删除后,共享的其他容器数据不受影响。

执行docker run命令时,添加参数--volumes-from 容器名或id实现容器之间的数据共享。

实战:安装MySQL

mysql的数据持久化问题

#获取镜像 [root@localhost gao]# docker pull mysql:5.7 #运行容器,需要做数据挂载! #安装启动mysq1,需要配置密码 #docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag [root@localhost gao]# docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7 #启动成功以后可以在本地使用数据库工具连接 [root@localhost gao]# docker exec -it a960d59a653f /bin/bash #进入容器

在本地测试创建一个数据库,查看一下映射的路径是否ok!

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/15 11:10:46

MATLAB多目标鲸鱼算法求解生产调度排程与流水车间调度

MATLAB多目标鲸鱼算法求解生产调度排程/流水车间调度最近在车间溜达的时候,几个老师傅拉着我吐槽产线排程的难题——订单天天变,机器总有故障,交货期还卡得死紧。这不典型的流水车间调度问题么?咱们今天换个野路子试试看&#xff…

作者头像 李华
网站建设 2026/8/15 11:11:34

探索 Informed RRT* 算法:原理与代码实践

informed rrt*算法 内涵详细的代码注释引言 在机器人路径规划领域,Informed RRT 算法可谓是一颗耀眼的明星。它结合了 RRT(快速探索随机树星型算法)的高效搜索能力以及通过引入启发式信息来引导搜索方向的独特优势,能够更快地找到…

作者头像 李华
网站建设 2026/7/14 16:01:38

NSLink轻量级SWD调试器:国产CMSIS-DAP兼容设计

1. 项目概述NSLink调试器是一款面向ARM Cortex-M系列微控制器开发的轻量级JTAG/SWD调试接口设备,专为嵌入式固件开发、在线调试与程序烧录场景设计。其核心定位是提供一种高兼容性、低侵入性、即插即用的调试通道,适用于实验室快速验证、教学演示及工程现…

作者头像 李华
网站建设 2026/7/14 16:01:36

开箱即用:万物识别镜像Gradio界面快速体验教程

开箱即用:万物识别镜像Gradio界面快速体验教程 1. 引言:让AI视觉识别像打开网页一样简单 想象一下,你拿到了一张照片,里面有个不认识的植物、一个没见过的零件,或者一件叫不上名字的老物件。以前你可能需要上网搜索、…

作者头像 李华