[kubernetes]-通过flyway的方式制作sql初始化的job
k8s
·
导语:通过flyway的方式制作sql初始化的job
需要2个文件 Dockerfile
、flyway-commandline-5.0.7.tar.gz
Dockerfile
FROM openjdk:8u151-jdk-alpine3.7
WORKDIR /flyway
ENV FLYWAY_VERSION 5.0.7
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apk update && apk add bash
COPY ./flyway-commandline-5.0.7.tar.gz /flyway
RUN tar -xzf flyway-commandline-${FLYWAY_VERSION}.tar.gz --strip-components=1 \
&& rm flyway-commandline-${FLYWAY_VERSION}.tar.gz \
&& ln -s /flyway/flyway /usr/local/bin/flyway
ENTRYPOINT ["/usr/local/bin/flyway"]
CMD ["-?"]
使用示例
sql-migration:
image: med-harbor.yitu-inc.com/default/sql-migration:latest
container_name: your_container_name
restart: on-failure
depends_on:
db:
condition: service_healthy
links:
- db
command: ['migrate', '-X']
volumes:
- ./migration_sql:/migrations # 将 sql 文件放在 ./migration_sql
- /etc/localtime:/etc/localtime
environment:
- FLYWAY_URL=jdbc:postgresql://db:5432/databasename?currentSchema=mammography # 配置下数据库名
- FLYWAY_USER=mammo # 配置下数据库用户
- FLYWAY_PASSWORD=mammo # 配置下数据库密码
- FLYWAY_LOCATIONS=filesystem:/migrations
- FLYWAY_VALIDATE_ON_MIGRATE=false
可以把sql的文件夹在dockerfile中加进去或者部署的时候挂载进去 。我这里选择了构建的时候创建,以便版本维护
FROM openjdk:8u151-jdk-alpine3.7
WORKDIR /flyway
ENV FLYWAY_VERSION 5.0.7
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apk update && apk add bash
COPY ./flyway-commandline-5.0.7.tar.gz /flyway
COPY ./migration_sql /migrations
RUN tar -xzf flyway-commandline-${FLYWAY_VERSION}.tar.gz --strip-components=1 \
&& rm flyway-commandline-${FLYWAY_VERSION}.tar.gz \
&& ln -s /flyway/flyway /usr/local/bin/flyway
ENTRYPOINT ["/usr/local/bin/flyway"]
CMD ["-?"]
sql-migration.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: sql-migration
spec:
template:
metadata:
name: sql-migration
spec:
containers:
- name: sql-migration
image: harbor.deepwise.com/dev/sql-migration:test02
command: ["sh","-c","/usr/local/bin/flyway migrate"]
#command: ["/sbin/init"]
env:
- name: FLYWAY_URL
value: "jdbc:mysql://mysql-headless:3306/terraapi?autoReconnect=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&useSSL=false&createDatabaseIfNotExist=true"
#value: "jdbc:mysql://mysql-headless:3306/terraapi?autoReconnect=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&useSSL=false"
- name: FLYWAY_USER
value: root
- name: FLYWAY_PASSWORD
value: PASSWORD
- name: FLYWAY_LOCATIONS
value: filesystem:/migrations
- name: FLYWAY_VALIDATE_ON_MIGRATE
value: "false"
restartPolicy: OnFailure
感觉比自己做一个执行sql的job方便了不少。sql一股脑往文件夹里扔就完事了。
更多推荐
已为社区贡献84条内容
所有评论(0)