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

素颜马尾好姑娘i 2022-06-02 12:13 326阅读 0赞

默认情况下,mysql镜像创建的docker容器启动时只是一个空的数据库实例,为了简化docker部署,我们需要
在docker创建mysql容器的时,数据库和表已经自动建好,初始化数据也已自动录入,也就是说容器启动后数据库就可用了。这就需要容器启动时能自动执行sql脚本。
在mysql官方镜像中提供了容器启动时自动执行/docker-entrypoint-initdb.d文件夹下的脚本的功能(包括shell脚本和sql脚本)
docker-entrypoint.sh中下面这段代码就是干这事儿的

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

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

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

Dockerfile

  1. # docker image of facelog mysql
  2. # version 1.0.0
  3. # author guyadong
  4. FROM mysql:5.6
  5. MAINTAINER guyadong(10km0811@sohu.com)
  6. # 复制数据库初始化脚本create_table.sql到/docker-entrypoint-initdb.d文件夹下
  7. 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

发表评论

表情:
评论列表 (有 0 条评论,326人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringBoot启动自动执行sql脚本

    在开发当中我们每次发布服务都需要手动执行脚本,然后重启服务,而SpringBoot有服务启动自动执行sql脚本的功能的,可以为我们省去手动执行脚本的这一步,只需要部署新的服务即