Adding Flyway to a MySQL Docker Container Adding Flyway to a MySQL Docker Container docker docker

Adding Flyway to a MySQL Docker Container


services:# Standard Mysql Box, we have to add tricky things else logging by workbench is hardsupermonk-mysql:  image: mysql  command:  --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci  environment:    - MYSQL_ROOT_PASSWORD=P@ssw0rd    - MYSQL_ROOT_HOST=%    - MYSQL_DATABASE=test  ports:    - "3306:3306"  healthcheck:    test: ["CMD-SHELL", "nc -z 127.0.0.1 3306 || exit 1"]    interval: 1m30s    timeout: 60s    retries: 6# Flyway is best for mysql schema migration history.supermonk-flyway:  container_name: supermonk-flyway  image: boxfuse/flyway  command: -url=jdbc:mysql://supermonk-mysql:3306/test?verifyServerCertificate=false&useSSL=true -schemas=test -user=root -password=P@ssw0rd migrate  volumes:   - "./sql:/flyway/sql"  depends_on:   - supermonk-mysql

mkdir ./sqlvi ./sql/V1.1__Init.sql # and paste below

CREATE TABLE IF NOT EXISTS test.USER (id VARCHAR(64),fname VARCHAR(256),lname VARCHAR(256),CONSTRAINT pk PRIMARY KEY (id));

save and close

docker-compose up -d

wait for 2 minutes

docker-compose run supermonk-flyway

Ref :

  1. https://github.com/supermonk/webapp/tree/branch-1/docker/docker-database
  2. Thanks to docker community and mysql community
  3. docker-compose logs -f


I mean it's the good way to start from the ready image (for start).

  • You may start from image docker "mysql"

    FROM mysql

    If you start the finished image - when creating new version your docker then will only update the difference.

  • Next, step you may install java and net-tools

    RUN apt-get -y install apt-utils openjdk-8-jdk net-tools
  • Config mysql

    ENV MYSQL_DATABASE=mydbENV MYSQL_ROOT_PASSWORD=root
  • Add flyway

    ADD flyway /opt/flyway
  • Add migrations

    ADD sql /opt/flyway/sql
  • Add config flyway

    ADD config /opt/flyway/conf
  • Add script to start

    ADD start /root/start.sh
  • Check start mysql

    RUN netstat -ntlp
  • Check java version

    RUN java -version

Example file: /opt/flyway/conf/flyway.conf

flyway.driver=com.mysql.jdbc.Driverflyway.url=jdbc:mysql://localhost:3306/mydbflyway.user=rootflyway.password=root

Example file: start.sh

#!/bin/bashcd /opt/flywayflyway migrate# may change to start.sh to start product migration or development. 

Flyway documentation

I mean that you in next step may use flyway as service:

For example:

docker run -it -p 3307:3306 my_docker_flyway /root/start << migration_prod.shdocker run -it -p 3308:3306 my_docker_flayway /root/start << migration_dev.sh

etc ...