在MySQL Docker容器中包含数据

这个问题类似于:

在Dockerfile中设置MySQL并导入转储

但是这个问题的答案没有解决我的使用案例。

我有一个MySQL数据库,在生产中有5TB的数据。 对于Dev,我只需要大约500MB的数据。 作为构build应用程序的一部分运行的集成testing需要访问MySQL数据库。 目前,正在Jenkins上创build数据库,并且正在通过构build过程将数据注入到数据库中。 这很慢。

我想用Dockerreplace这个过程的这一部分。 我的想法是,我将有一个运行MySQL的Docker容器,并且已经将500MB的数据放入容器,而不是依赖与容器启动时仅执行MySQL导入的MySQL Docker镜像关联的标准进程。 根据迄今为止的testing,标准过程需要4-5分钟,因为我希望将其降低到秒。

我原以为这将是一个常见的用例,但是在MySQL Docker容器中预烘焙数据似乎被忽视了,而且没有任何指导。 这个方法。

有没有人有这方面的经验? 数据是不是应该预先存入MySQL Docker容器中有一个很好的理由吗?

基于调查,我已经完成了这个工作,将数据包含在使用标准MySQL映像的容器中是不太可能的。

我试图通过从这个基地部署一个容器并操纵它,然后再提交一个新的图像来解决这个问题。

但是,关于MySQL基本映像有一个关键的理解。 它的数据目录(/ var / lib / mysql /)和config目录(/ etc / mysql /)都设置为Docker卷,这意味着它们的内容映射到主机系统上的位置。

这些卷不作为提交的一部分保存,所以你不能操纵和保存。 另外,图像具有防止用入口点例程来操作这些位置的function。

所有这些都是通过devise来devise的,因为可以设想这个图像可以与永久或独立的数据集一起使用。 如果有一个选项可以将数据包含在容器中,那就太好了,但是这看起来像是开发人员真正不想要的东西。

为了解决我的问题,我想回到一个基本的Ubuntu镜像,build立我的数据库,并承诺到一个新的形象,这工作正常。 容器大小有点大,但作为构build作业的一部分,部署速度明显快于等待基于MySQL的容器在启动时运行500MB导入的速度。

反对这个主要的观点是,你的图像是一个时间点的数据和模式的快照 – 它会很快变得陈旧,你需要一个很好的过程来生成新的数据很容易,使新的数据有用而不需要昂贵的维护。

也就是说,我不会愁眉不展 – 我认为这是一个非生产Docker镜像的特别好用例。 一张500MB的图片移动起来相当便宜,因此您可以拥有大量图片 – 针对数据库架构的不同版本标记版本,甚至针对不同testing场景使用不同数据集的多个图片。

预加载的数据库容器应该在几秒钟之内启动,因此在运行集成testing之前,您可以轻松地将相关容器作为构buildpipe道中的一个步骤运行。 只要意识到维护的开销 – 我会从一开始就关注实时,清理,收缩和打包的数据提取自动化。