前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker For Test 系列五:数据持久化

Docker For Test 系列五:数据持久化

作者头像
测试邦
发布2019-07-24 11:13:18
4850
发布2019-07-24 11:13:18
举报
文章被收录于专栏:测试邦测试邦

1、踩坑-commit命令

先说下自己最开始的解决数据持久化的思路:通过commit命令

看下docker官网的 commit命令的详解

上面有写到基于容器的变化新建一个镜像,既然如此,那我在容器中对数据的修改应该会保存到新生成的镜像中,然后我再用新镜像new一个容器出来,数据更新部分不就保存到新容器中了?

于是我在5.6版本mysql的镜像上new了一个容器出来:

docker run -p 3306:3306 --name qh1 -e MYSQL_ROOT_PASSWORD=123456-d mysql:5.6

查看容器 docker ps

使用navigator连接mysql容器

配置信息如下:

新建数据库test,并在test中新建表user

创建完数据,运行commit命令把容器生成镜像

docker commit qh1 qh-mysql1

查看镜像 docker images

从结果看镜像确实生成了,那来看看创建的数据是否有保存

马上使用新镜像new一个容器出来

连接qh-user容器

发现创建的库并没有保存下来

是时候求助官方文档了,查阅了docker commit的官方文档说明后,发现了在扩展说明中有这么一句话:

意思是commit操作并不会包含容器内挂载数据卷中的数据变化。难道是因为mysql容器的挂载数据卷引起的?

马上查看容器信息,是否有data mount相关信息:

Docker inspect qh1

结果如下:

这个信息的意思就是使用volume的方式mount,把载体机的Source目录挂载到容器的Destination目录,下面来看如何挂载数据即如何实现数据持久化

2、三种数据持久化方式

2.1、volume(重点介绍mysql实例)
2.1.1直接挂载

前提条件:qh1是一个mysql容器,基于mysql:5.6镜像生成,在qh1中手动添加了一个数据库test,在数据库中手动添加一个表user,表中有三个字段:

我们的目的是把qh1的volume挂载到新容器中的/var/lib/mysql目录下

首先我们要知道qh1的volume的路径

Docker inspect qh1查看容器

或者是docker inspect -f "{{.Mounts}}" qh1,切记区分大小写

找到qh1的volume路径为:/var/lib/docker/volumes/1de10c2b4efb8a3f8a64eb20ab44f916544ca782fa49956c7c87825aa064e179/_data

新建名称为qh2的mysql新容器,命令如下;

docker run -it -p 23306:3306 --name qh2 -v/var/lib/docker/volumes/1de10c2b4efb8a3f8a64eb20ab44f916544ca782fa49956c7c87825aa064e179/_data:/var/lib/mysql-e MYSQL_ROOT_PASSWORD=123456 --privileged=true -d mysql:5.6

容器创建成功后查看日志,看是否存在异常

Docker logs qh2

出现以下异常信息:

是两个库使用相同的数据文件导致的,解决:

关掉qh1,重新启动qh2容器,再次查看qh2日志

启动正常,使用navigator连接qh2数据库

注意端口号是23306

Test库和user表已经在新容器中了。

2.1.2共享方式

先看下docker官网的说明

只需要指定共享源,命令如下:

docker run --name qh3 --volumes-from qh1 -d-p 33306:3306 mysql:5.6

使用navigator查看

Test库和user也出现在了新容器中

2.2、bind mount
2.3、tmpfs
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试邦 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、踩坑-commit命令
  • 2、三种数据持久化方式
    • 2.1、volume(重点介绍mysql实例)
      • 2.1.1直接挂载
      • 2.1.2共享方式
    • 2.2、bind mount
      • 2.3、tmpfs
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档