作者:@郑琰
本文转载请注明出处!:https://www.cnblogs.com/zhengyan6/p/16099404.html
什么是容器数据卷
docker的理念回顾
- 将应用和运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对于数据的要求,是希望能够持久化的!
就好比,你安装一个MySQL,结果你把容器删了,就相当于删库跑路了.
- 所以我们希望容器之间有可能可以共享数据,Docker容器产生的数据,如果不通过docker commit 生成新的镜像,使得数据作为镜像的一部分保存下来,
那么当容器删除后,数据自然也就没有了!这样是行不通的!
为了能保存数据在Docker中我们就可以使用卷!通过目录的挂载将我们容器内目录挂载到Linux上面!让数据挂载到我们本地!这样数据就不会因为容器删除而丢失了!
作用
- 卷就是目录或者文件,存在一个或者多个容器中,由docker挂载到容器,但不属于联合文件系统,
因此能够绕过 Union File System ,提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
特点
1、数据卷可在容器之间共享或重用数据
2、卷中的更改可以直接生效
3、数据卷中的更改不会包含在镜像的更新中
4、数据卷的生命周期一直持续到没有容器使用它为止
总结为:就是容器的持久化,以及容器间的继承和数据共享!
使用数据卷
容器中直接使用命令来添加 -v
| # 命令 |
| docker run -it -v 主机绝对路径目录:容器内目录 镜像名 |
| |
| # 测试 |
| [root@zheng ~]# docker run -it -v /home/ceshi:/home centos /bin/bash |

- 测试容器和宿主机之间数据共享:可以发现,在容器中,创建的会在宿主机中看到!
| cd /home |
| ls |
| touch test.txt |
| ls |
| cd /home/ceshi |
| 即可看到有test.txt |
| |
| |
| |
| |
| exit容器 |
| cd /home/ceshi |
| ls |
| vim test.txt |
| docker ps -a |
| docker start 容器ID |
| docker attach 容器ID |
| cd /home |
| ls |
| cat test.txt |
便捷之处:以后修改数据只需要在本地修改即可,容器内会自动同步!
使用 docker 安装 mysql
| |
| [root@zheng ~] |
| NAME DESCRIPTION |
| STARS |
| mysql MySQL is a widely used, open-source |
| relation… 9488 |
| |
| |
| [root@zheng ~] |
| 5.7: Pulling from library/mysql |
| 54fec2fa59d0: Already exists |
| bcc6c6145912: Pull complete |
| 951c3d959c9d: Pull complete |
| 05de4d0e206e: Pull complete |
| 319f0394ef42: Pull complete |
| d9185034607b: Pull complete |
| 013a9c64dadc: Pull complete |
| e745b3361626: Pull complete |
| 03145d87b451: Pull complete |
| 3991a6b182ee: Pull complete |
| 62335de06f7d: Pull complete |
| Digest: |
| sha256:e821ca8cc7a44d354486f30c6a193ec6b70a4eed8c8362aeede4e9b8d74b8ebb |
| Status: Downloaded newer image for mysql:5.7 |
| docker.io/library/mysql:5.7 |
| |
| |
| |
| [root@zheng home] |
| MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7 |
| |
| |
| sqlyog->连接到服务器的3310—>3310和容器内3306映射,此时就可以连接上了 |
| |
| |
| 在sqlyog里创建一个文件 |
| [root@zheng ~] |
| [root@zheng data] |
| ... ... ... test |
| |
| |
| [root@zheng data] |
| mysql01 |
| [root@zheng data] |
| .. ... . test |
- 可发现,我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)