flyway / flyway-docker

Official Flyway Docker images

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Official Flyway Open Source Docker images

This is the official repository for Flyway Command-line Open Source images.

The Flyway Community, Teams and Enterprise editions are available in redgate/flyway on Dockerhub.

Flyway Pipelines isn't available in this version - please use Flyway Community at redgate/flyway if you want to use this feature of Flyway.

Suggested Project Structure

To make it easy to run Flyway the way you want to, you can use the following folders in your Flyway project

Volume Usage
/flyway/conf Directory containing a flyway.conf/toml configuration file
/flyway/drivers Directory containing the JDBC driver for your database
/flyway/sql The SQL files that you want Flyway to use (for SQL-based migrations)
/flyway/jars The jars files that you want Flyway to use (for Java-based migrations)

Getting started

The easiest way to get started is simply to test the default image by running

docker run --rm flyway/flyway

This will give you Flyway Command-line's usage instructions.

To do anything useful however, you must pass the arguments that you need to the image. For example:

docker run --rm flyway/flyway -url=jdbc:sqlite:dev.db info

Note that the syntax for flyway/flyway:*-azure is slightly different in order to be compatible with Azure Pipelines agent job requirements. As it does not define an entrypoint, you need to explicitly add the flyway command. For example:

docker run --rm flyway/flyway:latest-azure flyway

Adding SQL files

To add your own SQL files, place them in a directory, mount it and point flyway at it using the workingDirectory parameter.

Example

Create a new /sql directory in your project folder and add a file named V1__Initial.sql with following contents:

CREATE TABLE MyTable (
    MyColumn VARCHAR(100) NOT NULL
);

Now run the image with the volume mapped:

docker run --rm -v /absolute/path/to/my/project_folder:/flyway/project flyway/flyway -url=jdbc:sqlite:dev.db -workingDirectory="project" migrate

Adding a config file

If you prefer to store arguments in a config file you can put that in your project folder.

Example

Create a file named flyway.toml with the following contents:

[environments.development]
url = "jdbc:sqlite:/flyway/project/dev.db"
user= "admin"
password = "password1"

[flyway]
environment = "development"

Now run the image with that volume mapped as well:

docker run --rm -v /absolute/path/to/my/project_folder:/flyway/project flyway/flyway migrate -workingDirectory="project"

Adding a JDBC driver

If your database driver is not shipped by default (you can check the official documentation here to see if it is), or if you want to use a different or newer driver than the one included you can create a drivers/ folder in your project folder.

Adding Java-based migrations and callbacks

To pass in Java-based migrations and callbacks you can use a jars/ folder in your project directory and place them in there.

Docker Compose

To run both Flyway and the database that will be migrated in containers, you can use a docker-compose.yml file that starts and links both containers.

Example

version: '3'
services:
  flyway:
    image: flyway/flyway
    command: -url=jdbc:mysql://db -schemas=myschema -user=root -password=P@ssw0rd -connectRetries=60 migrate
    volumes:
      - .:/flyway/sql
    depends_on:
      - db
  db:
    image: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=P@ssw0rd
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    ports:
      - 3306:3306

Run docker-compose up, this will start both Flyway and MySQL. Flyway will automatically wait for up to one minute for MySQL to be initialized before it begins to migrate the database.

About

Official Flyway Docker images

License:Apache License 2.0


Languages

Language:Python 67.0%Language:Dockerfile 29.1%Language:Makefile 3.0%Language:Shell 0.9%