您的位置:首页 > 运维架构 > Docker

docker:mysql启动时自动执行初始建表脚本

2018-01-12 18:04 627 查看
默认情况下,mysql镜像创建的docker容器启动时只是一个空的数据库实例,为了简化docker部署,我们需要

在docker创建mysql容器的时,数据库和表已经自动建好,初始化数据也已自动录入,也就是说容器启动后数据库就可用了。这就需要容器启动时能自动执行sql脚本。

在mysql官方镜像中提供了容器启动时自动执行
/docker-entrypoint-initdb.d
文件夹下的脚本的功能(包括shell脚本和sql脚本)

docker-entrypoint.sh
中下面这段代码就是干这事儿的

for f in /docker-entrypoint-initdb.d/*; do
case "$f" in
*.sh)     echo "$0: running $f"; . "$f" ;;
*.sql)    echo "$0: running $f"; "${mysql[@]}" < "$f"; echo ;;
*.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${mysql[@]}"; echo ;;
*)        echo "$0: ignoring $f" ;;
esac
echo
done


也就是说只要把你自己的初始化脚本放到
/docker-entrypoint-initdb.d/
文件夹下就齐活了。

于是可以做这样一个简单的
Dockerfile
来实例我们的需求,其实关键的代码就是最后一行了。

Dockerfile

# docker image of facelog mysql
# version 1.0.0
# author guyadong
FROM mysql:5.6
MAINTAINER guyadong(10km0811@sohu.com)
# 复制数据库初始化脚本create_table.sql到/docker-entrypoint-initdb.d文件夹下
COPY sql/create_table.sql /docker-entrypoint-initdb.d


参考资料

mysql 5.6 entrypoint 脚本 https://github.com/docker-library/mysql/blob/master/5.6/docker-entrypoint.sh

mysql 5.6 镜像脚本 https://github.com/docker-library/mysql/blob/master/5.6/Dockerfile
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker nysql init database