首页 新闻 会员 周边

Docker 导出再导入问题

0
悬赏园豆:5 [已解决问题] 解决于 2023-09-28 10:04

先说我的目标

项目中要用到MySQL、Redis、RabbitMQ等,会部署到不同客户的服务器中。

为了简化部署,我希望在一台“母机”的Docker上配置好对应的服务器(以MySQL为例),并进行初始化(创建表、存储过程,还有初始的数据之类的),然后将容器打包成镜像,导出镜像,再在客户机上导入镜像,创建容器,运行

 

再说问题

1、如果用先后用 commit 、save 命令直接将“母机”上初始化好数据库的容器打包成镜像并导出,那么在客户机上  load、run 之后,发现数据库并没有初始化好

2、如果用 export 直接把“母机”上初始化好的容器导出,再导入到客户机时,总是提供要运行命令,加上命令 /bin/bash 导出虽然成功,但是不知道 mysql 有没有运行,而在“母机”上用 docker ps -a --no-trunc 查到的命令,又说找不到文件

 

还是说,Docker不是我这么用的?

背锅狼的主页 背锅狼 | 初学一级 | 园豆:62
提问于:2023-09-27 17:21
< >
分享
最佳答案
0

Docker确实不是这么用的! Docker主打一个简单和纯粹,一个Image启动一个docker实例,就应该干一件事。

您这种多个有先后关联顺序的任务,是需要“编排”的,比如使用Kubernetes。 “编排”可以让几个容器先后完成几个任务,比如初始化容器做创建表和初始数据之类,数据库容器运行MySQL。
这样可以有利于镜像分工,您做好自己的初始化容器的镜像的制作和优化迭代,数据库则使用社区的公共镜像,未来假如出现新的CVE漏洞,只需要更新数据库镜像的tag就可以完成修补,而不必要自己再封装一次。

如果觉得Kubernetes太复杂,可以考虑使用简化后的K3S;如果不懂Kubernetes那一套,最起码也要学习使用docker-compose. 有了编排后,您的目标才算是找到正确的方向。

收获园豆:5
sazhufa | 菜鸟二级 |园豆:211 | 2023-09-27 22:58

那这样的话,使用docker和我直接在linux上安装所需要的软件,似乎也没有什么太大的优势了。

无非就这么两点,一是docker上可能稍微简单那么一点点;二是,隔离性吧,如果一台linux主机上部署 redis, rabbitmq, tomcat…… docker 能够让它们相互之间的干扰变得更少。

 

还有其它优势吗

背锅狼 | 园豆:62 (初学一级) | 2023-09-28 09:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册