Dockerfile
#基础镜像使用 mysql:5.7
FROM mysql:5.7
#定义工作目录
ENV WORK_PATH /usr/local/work
#定义会被容器自动执行的目录
ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
#定义sql文件名
ENV SQL_FILE schema.sql
#定义shell文件名
ENV INSTALL_DB_SHELL install_db.sh
#创建文件夹
RUN mkdir -p $WORK_PATH
#把数据库初始化数据的文件复制到工作目录下
COPY ./$SQL_FILE $WORK_PATH/
#把要执行的shell文件放到/docker-entrypoint-initdb.d/目录下,容器会自动执行这个shell
COPY ./$INSTALL_DB_SHELL $AUTO_RUN_DIR/
#给执行文件增加可执行权限
RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DB_SHELL
install_db.sh
mysql -uroot -p$MYSQL_ROOT_PASSWORD << EOF
source $WORK_PATH/$SQL_FILE;
<<EOF:告诉主shell,后续的输入,是其他命令或者子shell的输入,直到遇到EOF为止,再回到主shell。
schema.sql
-- 建库
CREATE DATABASE my_database default charset utf8 COLLATE utf8_general_ci;
-- 切换数据库
use my_database;
-- 建表
DROP TABLE IF EXISTS `table1`;
-- 省略
......
启动命令
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:latest