首页 > 解决方案 > 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。

编辑:我通过执行以下操作实现了我的目标:

  1. 我如上所述添加了 sql 转储文件。
  2. 我运行容器并使用安装到 /var/lib/mysql 的本地目录(“数据”文件夹)构建了整个数据库。
  3. 然后停止容器并编辑 Dockerfile:

    FROM mysql
    ENV MYSQL_ROOT_PASSWORD=mypassword
    ENV MYSQL_DATABASE geodb
    WORKDIR /var/lib/mysql
    COPY ${PWD}\data .
    EXPOSE 3306
    

    因此,生成的数据库现在正在从本地系统复制到容器中。

标签: mysqldockerdockerfile

解决方案


您可以使用容器创建一个卷,以将数据库持久保存在本地计算机上。首次创建容器时,/docker-entrypoint-initdb.d将执行 SQL in,并将更改存储到卷中。下次启动容器时,MySQL 将看到模式已经存在,并且不会再次运行脚本。

https://docs.docker.com/storage/volumes/


推荐阅读