我有一个网站,其中包含与大型、不变的 MySQL 数据库相关联的非常具体的 JS 代码。我希望能够将网站和数据库作为单个包分发,以便其他人能够在本地运行,所以我一直在研究使用 docker 来做这件事。请注意,我没有使用 docker 来测试正在运行的应用程序:只是为了将其分发给其他人查看。
据我了解,运行已填充 MySQL 数据库的 docker 映像通常.sql
在启动数据库后从文件中加载它。但是,对于我的数据库内容,这会导致一个小时的等待来填充数据库,因为 .sql 转储有很多 GB,并且需要很长时间才能加载。因此,我正在考虑将数据加载到正在运行的数据库中一次,将数据库卷( )保持在图像本地,并在加载数据后/var/lib/mysql
使用创建图像的快照。docker commit
然而,这种方法似乎违背了许多标准docker commit
的 docker 建议:通常不受欢迎,并且/var/lib/mysql
存储为单独的数据卷,而不是保存在图像本身中。尽管如此,我的用例似乎有所不同,因为 (a) 数据库中的数据不打算在未来更改 (b) 从 mysql 转储加载需要很长时间以及 (c) 大型数据存储(而不是不仅仅是 js 应用程序代码)是我真正想要包含在图像中的主要内容之一。
那么我的用例是否是打破约定并docker commit
与将 MySQL 文件保存在映像本身而不是单独的数据卷一起使用的正当理由?或者有没有一种替代的、更标准的方式来分发一个完全工作、完全填充的 web 应用程序和一个大型固定数据库存储?