自动执行数据库更新脚本
docker compose自动执行数据库更新脚本
自动执行数据库更新脚本参考 链接
用于初始化数据库的脚本init.sql
sql
-- 用于初始化数据库脚本
CREATE DATABASE IF NOT EXISTS demo_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE demo_db;
CREATE TABLE IF NOT EXISTS `auth`(
id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
account VARCHAR(64) NOT NULL UNIQUE COMMENT '账号',
`password` VARCHAR(64) NOT NULL COMMENT '密码',
create_time DATETIME NOT NULL COMMENT '创建时间'
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;用于模拟更新数据库的脚本update.sql
sql
-- 用于更新数据库脚本
insert into `auth`(`account`,`password`,`create_time`) values ('user1', '123456', now());用于编译容器镜像的Dockerfile
dockerfile
FROM mariadb:10.4.19
RUN apt-get update
RUN apt-get install -y curl
ENV DOCKERIZE_VERSION v0.6.1
RUN curl --silent --output dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz https://bucketxyh.oss-cn-hongkong.aliyuncs.com/docker/dockerize-linux-amd64-v0.6.1.tar.gz
RUN tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
COPY init.sql /docker-entrypoint-initdb.d/
COPY update.sql /update.sql用于启动演示的docker-compose.yaml
yaml
version: "3.0"
services:
db:
build:
context: ./
image: demo-db:latest
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --skip-character-set-client-handshake
- --innodb-buffer-pool-size=1g
environment:
- LANG=C.UTF-8
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=123456
db-updater:
image: demo-db:latest
environment:
- TZ=Asia/Shanghai
command: sh -c "dockerize -wait tcp://db:3306 -timeout 120s -wait-retry-interval 5s
&& mysql -uroot -p123456 -P3306 -hdb demo_db < /update.sql
&& echo \"成功执行更新数据库脚本\""上面的docker-compose.yaml文件中的db-updater会自动执行容器内的/update.sql脚本
启动数据库
bash
docker compose up -d删除数据库
bash
docker compose down -v