首页 > 数据库 >【问题解决】容器部署MySQL的数据在docker commit导出的镜像中丢失

【问题解决】容器部署MySQL的数据在docker commit导出的镜像中丢失

时间:2023-08-24 11:26:12浏览次数:37  
标签:容器 镜像 MySQL mysql commit docker 数据

问题起因

最近公司有个甲方项目参加竞赛,要求在(基于kubeflow/arena)平台上部置应用,可以将MySQL打包在应用一起,也可以分开部署,没有提供volume相关的支持。大意是可以把初始好的数据直接拿到平台上。

经过本人在Linux虚机中启动MySQL容器导入数据再 docker commit 出镜像部署到平台上,发现数据竟然没了,包括新导的库。。。

问题排查经过

经过docker inspect发现一个不寻常的点,一直没关注过的情况。可以注意到ContainerConfig下Volumes挂了个{}

docker inspect mysql:5.7.17 -f "{{json .ContainerConfig.Volumes}}"
{"/var/lib/mysql":{}}

这是什么意思呢?

意思是说在容器启动后,自动分配一块Volume挂载到容器中/var/lib/mysql挂载点上。

也就是说Volume不会在docker commit时保存到镜像中。

经过查看官方仓库中发现了在Dockerfile中使用了VOLUME这个命令。

问题解决

问题原因找到了,把数据目录变更成其他目录不就可以实现MySQL+数据合到一个镜像中了嘛!

这里以手头的mysql:5.7.17版本的官方MySQL镜像举例,其他版本的配置文件不一定和本例中位置相同,一般配置文件处于/etc/my.cnf、/etc/mysql/下。

主要的修改数据目录和迁移数据的命令:

# 进入mysql容器
docker exec -it mysql bash
# 修改数据目录到/data/mysql,版本不同位置可能不同
sed -i "s#datadir.*/var/lib/mysql#datadir=/data/mysql#g" /etc/mysql/mysql.conf.d/mysqld.cnf
# 迁移数据目录
mkdir /data
cp -r /var/lib/mysql /data/
chown mysql:mysql /data -R
# 退出容器,重启容器使用新数据目录
exit
docker restart mysql
# 容器启动后,导入数据(省略步骤)
# 关闭myql容器以保存正常关闭状态
docker stop mysql
# 导出含数据的镜像
docker commit mysql mysql:v1

总结

简单记录一下导出带数据的MySQL镜像方式,踩到了Dockerfile的VOLUME指令的坑,简单分析了下该命令的作用。文中镜像带数据这只是为了临时使用,几乎不变更数据情况下使用,容器重启会导到增量数据丢失。

标签:容器,镜像,MySQL,mysql,commit,docker,数据
From: https://www.cnblogs.com/hellxz/p/17653690.html

相关文章

  • mysql 主从复制原理
    mysqlmaster主库启动binlog日志,每次执行的数据库操纵语句写入binlog,从库定期启动一个i/o线程去binlog日志,将binlog日志写入从库的relaylog(中继日志),再启动sql线程去将relaylog日志将数据重放,其他都是顺序读写,这个步骤是可能造成延迟的主要原因解决办法:1、从库配置比主库好,2......
  • Mysql 定时备份数据库脚本
    Mysql定时备份数据库;并且删除X天前的备份数据;1.  创建数据目录mkdirdatacd/data2.  编写脚本文件    vim  backup.sh#!/bin/bash#日期dd=`date+%Y-%m-%d-%H-%M-%S`#保存备份个数,备份2天数据backup_clean_day=2#用户名username=root#密......
  • MySQL相关
    mysql-悲观锁使用select...forupdate,就实现了。zhelyao注意,mysql的select...forupdate语句,会把所有扫描的行都锁上,所以在mysql中使用悲观锁,我们必须要确定走了索引,不然可能会全表扫描,锁住整个表。mysql-乐观锁在我们要修改前,先查询一个这个值和一个自己维护的版本号,记录下来......
  • Python-PyMySQL的一些使用注意事项
    一、关于groupby的使用在部分mysql版本(5.7.xx及以上)中,若select的列中,包含了未被groupby的字段,会报以下错误:[Err]1055-Expression#1ofORDERBYclauseisnotinGROUPBYclauseandcontainsnonaggregatedcolumn'xxxx'whichisnotfunctionallydependentoncolu......
  • Docker-Swarm启动服务一直处于New状态
    一、情况描述​ 近期有个项目的开发环境需要迁移nas挂载盘,需要把开发环境的服务停止,待迁移完成后重启服务。​ 该环境使用的docker-swarm启动服务,之前考虑的是swarm是docker原生支持的,启动方便,命令也较为简单,能够满足使用需求。待更换nas盘完成,通知我启动服务。​ 按照正常......
  • docker-swarm的负载均衡(LB)策略-dnsrr与vip
    在DockerSwarm中,DNSRR(DNSRoundRobin)和VIP(VirtualIP)是两种常见的负载均衡策略,它们各自有不同的作用和特点。DNSRR(DNSRoundRobin)负载均衡策略:作用:DNSRR策略通过对域名解析返回多个后端服务的IP地址来实现负载均衡。每个请求都会被依次分发到这些IP地址中的一个。特点:简单......
  • docker 常用命令--todo....
    docker常用命令docker设置开机自启docker-v启动dockersystemctlstartdocker查看docker状态systemctlstatusdockerdocker设置开机自启systemctlenbaledocker修改docker仓库的地址---------------------------基础设置--------------------------开机自启su......
  • Docker 安装 Nginx 教程
    Docker安装1.拉取镜像PSC:\Users\Administrator>dockerpullnginx2.创建挂载目录PSC:\Users\Administrator>mkdir-p/docker/nginx/confPSC:\Users\Administrator>mkdir-p/docker/nginx/logsPSC:\Users\Administrator>mkdir-p/docker/nginx/con......
  • linux服务器docker compose的使用步骤
    之前说了docker的安装,dockercompose的安装,还比较了dockerfile和dockercompose的区别,那么dockercompose的实际应用是怎么样呢?记录下我的实操步骤1、服务器上新建目录,目录情况如下,我的data目录是挂载到数据盘的/data/docker_config/nginx//存放nginx的配置文件/dat......
  • 数仓数据导出mysql保留换行符踩坑
    记录一个导数的小坑,数仓里面的数据需要导出到mysql,然后报表展示,并且需要把一段文字里面的换行功能体现出来;数仓里面的原始数据采用的是$符号进行分割每一行数据,直接把$符号替换为\n然后导出到mysql,发现没有生效,反而在页面上把\n展示出来了。那么注意了,经过反复尝试写成\\\n,然......