在之前的章节中,我们有介绍到使用 Docker-compose 创建 MySQL服务。当时的做法是在构建自定义MySQL镜像时帮我们创建数据库,并执行初始化的sql脚本。但是这种方式有个缺点,就是无法创建多个数据库
本章重点讲解如何在构建容器时,创建多个数据库,执行多个数据库脚本

目录结构

先提前看一下目录结构
image.png

创建 docker-compose.yml 文件

文件内容如下:

  1. version : '3.8'
  2. services:
  3. ruoyi-mysql:
  4. container_name: ruoyi-mysql
  5. image: mysql:5.7
  6. build:
  7. context: ./mysql
  8. volumes:
  9. - ./mysql/conf:/etc/mysql/conf.d
  10. - ./mysql/logs:/logs
  11. - ./mysql/data:/var/lib/mysql
  12. ports:
  13. - "3306:3306"
  14. command: [
  15. 'mysqld',
  16. '--innodb-buffer-pool-size=80M',
  17. '--character-set-server=utf8mb4',
  18. '--collation-server=utf8mb4_unicode_ci',
  19. '--default-time-zone=+8:00',
  20. '--lower-case-table-names=1'
  21. ]
  22. environment:
  23. # MYSQL_DATABASE: 'ry-cloud'
  24. MYSQL_ROOT_PASSWORD: password

创建 dockerfile 文件

  1. # 基础镜像
  2. FROM mysql:5.7
  3. # author
  4. MAINTAINER ruoyi
  5. #定义工作目录, 这个环境变量在 init.sh脚本也会用到,
  6. ENV WORK_PATH /data/init/
  7. # 将要创建容器初始化的脚本拷贝到容器中
  8. COPY ./db/ry_20210908.sql $WORK_PATH/
  9. COPY ./db/ry_config_20210730.sql $WORK_PATH/
  10. # 拷贝 .sh 脚本到 /docker-entrypoint-initdb.d/ 目录下,该脚本会被自动执行
  11. ADD ./sh/init.sh /docker-entrypoint-initdb.d/

创建 init.sh 脚本文件

  1. #!/bin/bash
  2. mysql -uroot -p$MYSQL_ROOT_PASSWORD <<EOF
  3. source $WORK_PATH/ry_20210908.sql
  4. source $WORK_PATH/ry_config_20210730.sql

拷贝 sql 脚本

image.png

启动服务

  1. docker-compose up

结果

image.png
image.png