1.原理
当Mysql容器首次启动时,会在 /目录下扫描 .sh,.sql,.类型的文件。如果这些类型的文件存在,将执行它们来初始化一个数据库。这些文件会按照字母的顺序执行。
2.自定义 Dockerfile
我们编写自己的Dockerfile来实现我们的需求,这里以 Mysql:5.7 为例。不同的版本可能有一定的出入,需要详细去阅读官方文档。脚本如下:
FROM mysql:5.7
LABEL OG=
COPY /etc/mysql//
COPY ./sql /tmp/sql
RUN mv /tmp/sql/*.sql /
RUN rm -rf /tmp/sql
第一步,引入官方 Mysql:5.7 Docker 镜像。
第二步,无实际意义,主要是作者、组织信息。
第三步,很重要!本来我没有配置第三行,结果运行容器后发现初始化数据的中文全部乱码了。所以需要在初始化数据库前修改Mysql的编码等配置,这里我顺便把时区也改为了+8:00。
第四步,复制包含数据库脚本的 ./sql文件夹到镜像的/tmp/sql下。
第五步,使用 mv 命令把第四步拷贝的文件夹下的所有.sql文件复制到 /下,这样才能利用2.章节的机制进行初始化数据库。
第六步,删除使用过的临时目录。
然后你可以通过构建镜像命令构建自定义的 Mysql 镜像:
# 一定不要忘记最后的一个 . 点
docker build -t mysql:5.7c .
这个一定要在当前目录(有dockerfile的目录)运行,最后一个 . 表示当前目录