docker部署mysql初始化数据库

忘是亡心i 2023-10-02 23:57 50阅读 0赞

一、前言

在使用docker部署mysql服务时,往往需要在创建容器时新建database,在需要在创建实例的过程中希望初始化sql脚本。

mysql官方镜像支持在容器初次启动时自动执行指定的sql脚本或shell脚本(注意:只有初次启动时才能自动执行),在mysql官方的Dockerfile中有下面几句话:(mysql官方地址)

  1. COPY docker-entrypoint.sh /usr/local/bin/
  2. RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat
  3. ENTRYPOINT ["docker-entrypoint.sh"]

在容器创建时会调用docker-entrypoint.sh这个脚本,这个脚本会遍历docker-entrypoint-initdb.d目录下所有的.sh和.sql后缀的所有脚本并执行,执行顺序为脚本文件名称排序。

二、实现

根据mysql官方给出的Dockerfile可知,把我们要初始化的sql脚本放到docker-entrypoint-initdb.d目录下,在mysql容器创建的时候就会根据脚本自动初始化。

我这里是使用的是centos7环境

1.Dockerfile

下面来编写Dockerfile

  1. FROM mysql:5.7
  2. ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
  3. ENV INSTALL_DB_SQL init_database.sql
  4. COPY ./$INSTALL_DB_SQL $AUTO_RUN_DIR/
  5. RUN chmod 777 $AUTO_RUN_DIR/$INSTALL_DB_SQL

Dockerfile说明:

FROM:从mysql:5.7镜像拉取;

ENV:定义环境变量

COPY:拷贝

RUN:执行

记得要给sql脚本文件添加可执行权限,chmod a+x 也可以

2.编写sql脚本

把写好的sql脚本放到与Dockerfile同级的目录下

  1. -- 建库
  2. CREATE DATABASE IF NOT EXISTS test_db default charset utf8 COLLATE utf8_general_ci;
  3. -- 切换数据库
  4. use test_db;
  5. -- 建表
  6. DROP TABLE IF EXISTS `test_table`;
  7. CREATE TABLE `test_table` (
  8. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  9. `name` varchar(20) DEFAULT NULL COMMENT '姓名',
  10. `sex` varchar(11) DEFAULT NULL COMMENT '性别',
  11. PRIMARY KEY (`id`)
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  13. -- 插入数据
  14. INSERT INTO `test_table` (`id`, `name`, `sex`)
  15. VALUES
  16. (1,'张三','男'),
  17. (2,'李四','女');

3.构建镜像并启动容器

将Dockerfile和sql脚本编写好后构建镜像

  1. docker build -t init_mysql:v0.1 .

2a242dcb26a1491a906a87399e982e34.png

查看镜像

  1. docker images | grep init_mysql

fbe4a9fcadbb4406a3b94e8c8178675d.png

创建mysql容器后查看状态

  1. docker run --name mysql -p 13306:3306 -e MYSQL_ROOT_PASSWORD=root -d init_mysql:v0.1
  2. docker ps -a | grep mysql

3eca5c5ff9de4f909835774f6eeb5b76.png

至此创建mysql容器并初始化已完成

三、验证

进入到mysql容器中,查看docker-entrypoint-initdb.d/目录下是否有我们的sql脚本

3aaa07b9d28841129835897a46aa7fd7.png

进入mysql,输入密码后,查看sql脚本创建的库、表、数据是否存在

  1. mysql -u root -p

233b815d3c624158bb97543e06adea90.png

  1. show databases;
  2. use test_db;
  3. show tables;
  4. select * from test_table;

f59042b487554b3283cf8a38c9f6f3f5.png

END!

发表评论

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

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

相关阅读