我正在开发一个应用程序,并尝试实现微服务体系结构。有关位置(城市,邮政编码等)的信息,我从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。
编辑: 我通过以下操作实现了自己的目标:
然后停止容器并编辑Dockerfile:
FROM mysql
ENV MYSQL_ROOT_PASSWORD=mypassword
ENV MYSQL_DATABASE geodb
WORKDIR /var/lib/mysql
COPY ${PWD}\data .
EXPOSE 3306
因此,现在正在将生成的数据库从本地系统复制到容器中。
答案 0 :(得分:0)
您可以使用容器创建一个卷以将数据库持久存储在本地计算机上。首次创建容器时,将执行/docker-entrypoint-initdb.d
中的SQL,并将所做的更改存储到卷中。下次启动容器时,MySQL将看到该模式已经存在,并且不会再次运行脚本。
答案 1 :(得分:0)
原则上,您可以这样实现:
docker commit
来生成容器当前状态的图像。另一种选择是在映像构建期间加载数据库,但是为此,您必须像在entrypoint脚本中那样启动mysql。
mysql < sql file