mysql - docker中的巨大静态(mysql)数据库
问题描述
我正在开发一个应用程序并尝试实现微服务架构。有关位置(城市、邮政编码等)的信息,我从 opengeodb.org 下载了 mysql 的数据库转储。
现在我想将数据库作为 docker 容器提供。我使用以下 Dockerfile 设置了一个 mysql 映像,如 mysql 映像的文档中所述:
FROM mysql
ENV MYSQL_ROOT_PASSWORD=mypassword
ENV MYSQL_DATABASE geodb
WORKDIR /docker-entrypoint-initdb.d
ADD ${PWD}/sql .
EXPOSE 3306
“sql”文件夹包含带有原始数据作为插入语句的 sql 脚本,因此它创建了整个数据库。问题是,数据库真的很大,而且设置它需要很长时间。
所以我想,也许有可能将创建的数据库保存在图像中,因为它是一个仅用于只读操作的静态数据库。
我对 docker 还很陌生,不太确定如何实现这一点。
我在 Windows 10 机器上使用 docker。
编辑:我通过执行以下操作实现了我的目标:
- 我如上所述添加了 sql 转储文件。
- 我运行容器并使用安装到 /var/lib/mysql 的本地目录(“数据”文件夹)构建了整个数据库。
然后停止容器并编辑 Dockerfile:
FROM mysql ENV MYSQL_ROOT_PASSWORD=mypassword ENV MYSQL_DATABASE geodb WORKDIR /var/lib/mysql COPY ${PWD}\data . EXPOSE 3306
因此,生成的数据库现在正在从本地系统复制到容器中。
解决方案
您可以使用容器创建一个卷,以将数据库持久保存在本地计算机上。首次创建容器时,/docker-entrypoint-initdb.d
将执行 SQL in,并将更改存储到卷中。下次启动容器时,MySQL 将看到模式已经存在,并且不会再次运行脚本。
推荐阅读
- c# - WPF MVVM 如何在收到新的/更新的墨迹时更新 UI
- python - 获取忽略透明像素的表面的平均颜色
- flutter - 从另一个页面调用 JSON 结果
- swiftui - SwiftUI - 'windows' 在 iOS 15.0 中已弃用:使用 UIWindowScene.windows
- python - 在 Jupyter 中进行任何可视化时内核死机
- r - 有没有办法让有序列表项在 Rmarkdown ioslides 的增量模式下显示得更快?
- python - 基于另一个列表中的序列迭代和求和第二个列表的元素
- bash - 是否可以使用 bash 在文字字符串中填充变量
- flutter - Flutter 移动 ListView 项目对齐错误
- java - Spring security Userdetails 无法转换为我自己的用户实现