18-数据持久化-Data Volume
18-数据持久化-Data Volume
Data Volume 使用场景。一般来讲有些容器自己会产生一些数据,我们不想数据随着容器的销毁而销毁,我们想保存数据,正常一般用在数据库,比如我们想保存数据库中的数据,这个时候我们就会使用 Data Volume。
创建数据库容器
我们通过创建一个 mysql 的数据库来看看如何数据持久化。
我们先查看一下 mysql 的安装方式,通过 docker hub 来查找。
我们点击 5.7.25, 5.7, 5 (5.7/Dockerfile)
这一条查看它的Dockerfile。
...
VOLUME /var/lib/mysql
...
我们可以看到上面这一句,含义就是创建容器的时候就会产生一个 /var/lib/mysql
的 Data Volume。
例子1:
创建一个无密码的mysql容器
docker run -d -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql1 mysql
正常mysql数据库是需要账户和密码的,为了方便我们不使用密码。
查看本地的 Data Volume
[vagrant@10 ~]$ docker volume ls DRIVER VOLUME NAME local 1f40fd662b4cf5b83abde370c659a42bf0a706ef58451baa11c4d58c1bc17083
可以看到本地产生了一个 Data Volume,这就是 mysql的创建的过程中会去创建一个 Volume,也就是之前在它的Dockerfile中看到的那一段。
查看指定volume的详细信息
[vagrant@10 ~]$ docker volume inspect 1f40fd662b4cf5b83abde370c659a42bf0a706ef58451baa11c4d58c1bc17083 [{"CreatedAt": "2019-02-14T01:32:54Z","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/1f40fd662b4cf5b83abde370c659a42bf0a706ef58451baa11c4d58c1bc17083/_data","Name": "1f40fd662b4cf5b83abde370c659a42bf0a706ef58451baa11c4d58c1bc17083","Options": null,"Scope": "local"} ]
我们发现这个volume是mount到本地的
/var/lib/docker/volumes/
下。再次创建一个mysql容器
docker run -d -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql2 mysql
查看本地的 Data Volume
[vagrant@10 ~]$ docker volume ls DRIVER VOLUME NAME local 1f40fd662b4cf5b83abde370c659a42bf0a706ef58451baa11c4d58c1bc17083 local 4a6269797a9e1f4c4fd43f80fd96a1bb9ac8174aec867947b5aee182fae0d3b8
又产生了一个新的volume。
查看新产生的volume的详细信息
[vagrant@10 ~]$ docker volume inspect 4a6269797a9e1f4c4fd43f80fd96a1bb9ac8174aec867947b5aee182fae0d3b8 [{"CreatedAt": "2019-02-14T01:37:02Z","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/4a6269797a9e1f4c4fd43f80fd96a1bb9ac8174aec867947b5aee182fae0d3b8/_data","Name": "4a6269797a9e1f4c4fd43f80fd96a1bb9ac8174aec867947b5aee182fae0d3b8","Options": null,"Scope": "local"} ]
如果我们删除volume对应的mysql容器,这个volume是不会自动删除的,我们实验一下。
删除mysql2
docker stop mysql2 && docker rm mysql2
查看本地volume情况
[vagrant@10 ~]$ docker volume ls DRIVER VOLUME NAME local 1f40fd662b4cf5b83abde370c659a42bf0a706ef58451baa11c4d58c1bc17083 local 4a6269797a9e1f4c4fd43f80fd96a1bb9ac8174aec867947b5aee182fae0d3b8
我们发现这个volume是没有跟着删除的,达到了数据持久化的目的,解决了数据丢失。
volume设置别名
我们可以发现volume的名字有点太长了,并且不友好。
那我们可以给volume设定一个别名,这样更方便我们识别volume。
删除我们之前创建的所有mysql容器和数据卷volume。
docker stop mysql1 && docker rm mysql1 docker volume rm 1f40fd
查看数据卷是否全部删除
[vagrant@10 ~]$ docker volume ls DRIVER VOLUME NAME
重新创建一个mysql容器
docker run -d -v mysql:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql1 mysql
查看本地的volume
[vagrant@10 ~]$ docker volume ls DRIVER VOLUME NAME local mysql
验证是否数据的生成的数据同步到这个mysql数据卷内
进入mysql容器
docker exec -it mysql1 /bin/bash
进入mysql数据库命令行
mysql -u root
显示当前数据库的databases
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.03 sec)
创建一个新的docker databases
mysql> create database docker; Query OK, 1 row affected (0.01 sec)
查看mysql当前的databases
mysql> show databases; +--------------------+ | Database | +--------------------+ | docker | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)
退出mysql和容器
exit exit
删除mysql1容器
docker stop mysql1 && docker rm mysql1
查看volume是否还在
[vagrant@10 ~]$ docker volume ls DRIVER VOLUME NAME local mysql
我们发现是还在的。那我们后面再重新创建一个mysql并使用这个volume,是不是刚刚创建的docker databease还会存在呢?答案是的。
再次创建一个mysql2容器,并还是使用刚刚的mysql数据卷
docker run -d -v mysql:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql2 mysql
进入mysql容器并查看databases
docker exec -it mysql2 /bin/bash
root@b0614271afc6:/# mysql -u root mysql> show databases; +--------------------+ | Database | +--------------------+ | docker | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.01 sec)
我们发现docker database还在。
总结
在以后的工作中,如果你使用docker,那么你可能会经常使用volume,它可以帮助我们保护数据而不随着容器的销毁而销毁。
docker的数据持久化也比较简单,在容器的Dockerfile中添加 VOLUME 字段,那么容器在创建的时候会映射到docker的volume上并生成一个名字,但是这个名字很难记,是一堆字符串。那么我们可以通过 -v
参数来修改这个volume的名字,让我们可以更好的识别它。
18-数据持久化-Data Volume相关推荐
- 三剑客”之Swarm应用数据持久化管理(volume 、bind 、 nfs)
1.前言 在上一篇文章 <"三剑客"之Swarm集群架构.集群管理 .服务管理>中,大家已了解swarm集群管理以及如何管理swarm集群中的服务.试想一下,如果sw ...
- @kubernetes(k8s)数据持久化Volume存储卷(emptyDir、hostPath、NFS、StorageClass)
文章目录 kubernetes(k8s)数据持久化Volume 一.数据持久化 1.Vlolume概述 2.数据卷的分类 3.常用的四种数据卷 4.Pod使用Volume步骤: 5. volume基本 ...
- docker mysql data volume_Docker 持久化存储, Data Volume/Bind Mounting
docker容器, 再启动之后 我们可以对其进行 修改删除等等. 如果是一个数据库的容器, 里面的数据 不想随着这个容器的消失, 而消失. 就需要持久化数据存储. Data Volume 这是 do ...
- 从零开始学习docker(九)持久化存储和数据共享之 Data Volume
撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 有些时候容器会产生一些数据,而我们不希望这些数据随着容器的删除而删除.想保证数据的安全,一般用在数据库. 首先看 ...
- docker学习笔记(四)docker数据持久化volume
docker数据持久化 官网:https://docs.docker.com/storage/volumes/ docker中的容器是可以随时销毁的,容器中的数据会随着容器的消亡而消亡.然而很多容器都 ...
- Named Volume 在 MySQL 数据持久化上的基本应用
原文作者:春哥 非常感谢春哥的投稿,同时也有一些感慨. 初识春哥时,春哥是美术设计大咖.后不久,创业并致力于游戏开发,已有3年.从Unity3D到IOS(Swift)开发,从前端开发到后端以及容器技术 ...
- 【Docker系列 Swarm】 swarm volume 数据持久化
Docker Swarm volume 数据持久化 volume 是将宿主级的目录映射到容器中,以实现数据持久化. 可以用两种方式来实现: volume 默认模式:工作节点宿主机数据同步到容器内. v ...
- iOS 数据持久化 -- Core Data (2)
2019独角兽企业重金招聘Python工程师标准>>> 1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里, ...
- Android数据持久化:SharePreference
SharePreference:作为Android数据持久化的一种,具有一定的便捷性,适合存储一些体积小的数据. 存储数据方式:键值对的方式,类似于Map: 利用SharePreference.Edi ...
最新文章
- R语言四格表的统计分析及假设检验
- JavaWeb学习笔记①——Java向下转型在JavaEE中运用——登陆验证
- 用私有构造器或者枚举类型强化Singleton 属性
- muy bien_配置Java EE应用程序或“将Bien付诸实践”
- python 使用requests模块进行 视频文件的下载
- [Linux] undefined reference to `itoa'
- Linux调优(文件系统)
- 智慧城市建设亟待突破大数据瓶颈
- 改变变压器联接方式可消除某些特定次数的谐波_电工牛人10年经验,总结的4电工常用接线方法41例,电机、变压器、接触器..都有...
- (转)教你记住ASP.NET WebForm页面的生命周期
- Css盒模型有哪几部分,标准盒模型和IE盒模型有哪些区别
- 【悟空云课堂】第四十三期:空指针解引用CWE-476: NULL Pointer Dereference
- 苹果手机电池健康怎么看_打开手机这个功能,就能知道手机电池的健康度,安卓苹果都可以!...
- 不用群发,就可以查看你被哪些微信好友删除了
- yum 无法安装gcc 出现Run “yum repolist all” to see the repos you have异常
- seo是什么,干什么用,有什么作用(二)
- 防疫主题的微信公众号图文排版有哪些技巧?
- 汉字转16进制 php,PHP实现中文汉字与16进制编码转换
- 关于对技术群中群友积极参与问答的一点看法
- 地理信息可视化——Python之matplotlib Basemap简介
热门文章
- 计算机知识产权 教学目标,计算机教学设计模板
- com.android.tools.build:gradle:2.3.3,关于com.android.tools.build:gradle:3.4.2的构建问题
- Python 线程障碍对象 Barrier - Python零基础入门教程
- mysql查看服务器版本sql_云服务器Windows系统查看mysql版本
- linux maven自动构建,Centos7.3+Jenkins+Git+Maven 自动化构建部署项目
- vim中自动添加文件的作者、时间信息、版本等
- 单片机c语言 外部中断,单片机C语言代码:外部中断,按下中断按键LED不亮,LED1正常亮...
- java 1的阶乘之和_1-20的阶乘之和(java)
- idea测试连接mysql报错08001_IDEA连接MySQL(版本8)数据库失败的解决方法(报错08001)...
- cmd c语言 图形,CMD-C彩图隐写方案