From efe39f503ad403a4ea4014c5e655f48eae3180d5 Mon Sep 17 00:00:00 2001 From: Robert Reeves Date: Mon, 28 Sep 2020 09:57:30 -0500 Subject: [PATCH 01/15] Docs for Liquibase Official Image --- liquibase/README-short.txt | 1 + liquibase/content.md | 19 +++++++++++++++++++ liquibase/github-repo | 1 + liquibase/license.md | 1 + liquibase/logo.png | Bin 0 -> 39491 bytes liquibase/maintainer.md | 1 + 6 files changed, 23 insertions(+) create mode 100644 liquibase/README-short.txt create mode 100644 liquibase/content.md create mode 100644 liquibase/github-repo create mode 100644 liquibase/license.md create mode 100644 liquibase/logo.png create mode 100644 liquibase/maintainer.md diff --git a/liquibase/README-short.txt b/liquibase/README-short.txt new file mode 100644 index 000000000000..fb08a9ad6f19 --- /dev/null +++ b/liquibase/README-short.txt @@ -0,0 +1 @@ +Liquibase is DevOps for your database. \ No newline at end of file diff --git a/liquibase/content.md b/liquibase/content.md new file mode 100644 index 000000000000..75e0f7b93c16 --- /dev/null +++ b/liquibase/content.md @@ -0,0 +1,19 @@ +# What is Liquibase? + +Liquibase is DevOps for your database. More information about Liquibase can be found at http://www.liquibase.org. + +Liquibase compares the contents of a Change Log to the database to determine which, if any, changes need to be applied to the database. For example, you can create tables, add columns, and many more with Liquibase. Liquibase is delivered via a Docker container to assist users that are leveraging Docker for their CI/CD solution. + +%%LOGO%% + +# How to use this image + +If you are executing Liquibase via the command line today, you are probably doing it like so: + +`liquibase update --driver=org.postgresql.Driver --url=”jdbc:postgresql://:/” --changeLogFile=/liquibase/changelog/changelog.xml --username= --password=` + +The only change to use this docker image, is to use `docker run ...` and mount the folder containing your changelog.xml (or .yml or .json or .sql) to `/liquibase/changelog` in the Liquibase container + +`docker run -v /home/user/changelog:/liquibase/changelog liquibase --driver=org.postgresql.Driver --url=”jdbc:postgresql://:/” --changeLogFile=/liquibase/changelog/changelog.xml --username= --password=` + +All Liquibase commands, such as `rollback`, `updateSQL`, and others, are available, as well. \ No newline at end of file diff --git a/liquibase/github-repo b/liquibase/github-repo new file mode 100644 index 000000000000..afa7a8afa2b6 --- /dev/null +++ b/liquibase/github-repo @@ -0,0 +1 @@ +https://github.com/liquibase/docker \ No newline at end of file diff --git a/liquibase/license.md b/liquibase/license.md new file mode 100644 index 000000000000..f80fe12052df --- /dev/null +++ b/liquibase/license.md @@ -0,0 +1 @@ +View [license information](https://github.com/liquibase/liquibase/blob/master/LICENSE.txt) for the Liquibase software contained in this image. diff --git a/liquibase/logo.png b/liquibase/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9f6d31750b24aff850e96686f011f4a6b49f7172 GIT binary patch literal 39491 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 literal 0 HcmV?d00001 diff --git a/liquibase/maintainer.md b/liquibase/maintainer.md new file mode 100644 index 000000000000..e727ff0696ae --- /dev/null +++ b/liquibase/maintainer.md @@ -0,0 +1 @@ +../.common-templates/maintainer-community.md \ No newline at end of file From 0ec838c58adf3e9c32e17f71f202efd85c3504f9 Mon Sep 17 00:00:00 2001 From: Robert Reeves Date: Mon, 28 Sep 2020 10:09:13 -0500 Subject: [PATCH 02/15] Docs for Liquibase Official Image --- liquibase/content.md | 2 +- liquibase/license.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/liquibase/content.md b/liquibase/content.md index 75e0f7b93c16..160915ed588d 100644 --- a/liquibase/content.md +++ b/liquibase/content.md @@ -16,4 +16,4 @@ The only change to use this docker image, is to use `docker run ...` and mount t `docker run -v /home/user/changelog:/liquibase/changelog liquibase --driver=org.postgresql.Driver --url=”jdbc:postgresql://:/” --changeLogFile=/liquibase/changelog/changelog.xml --username= --password=` -All Liquibase commands, such as `rollback`, `updateSQL`, and others, are available, as well. \ No newline at end of file +All Liquibase commands, such as `rollback`, `updateSQL`, and others, are available, as well. \ No newline at end of file diff --git a/liquibase/license.md b/liquibase/license.md index f80fe12052df..6bca3921a56a 100644 --- a/liquibase/license.md +++ b/liquibase/license.md @@ -1 +1 @@ -View [license information](https://github.com/liquibase/liquibase/blob/master/LICENSE.txt) for the Liquibase software contained in this image. +View [license information](https://github.com/liquibase/liquibase/blob/master/LICENSE.txt) for the Liquibase software contained in this image. \ No newline at end of file From 06518606cad19909180b76328e392da4523c10f7 Mon Sep 17 00:00:00 2001 From: Robert Reeves Date: Mon, 28 Sep 2020 10:18:55 -0500 Subject: [PATCH 03/15] Docs for Liquibase Official Image --- liquibase/content.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/liquibase/content.md b/liquibase/content.md index 160915ed588d..bc9a7504cfda 100644 --- a/liquibase/content.md +++ b/liquibase/content.md @@ -1,6 +1,6 @@ # What is Liquibase? -Liquibase is DevOps for your database. More information about Liquibase can be found at http://www.liquibase.org. +Liquibase is DevOps for your database. More information about Liquibase can be found at [http://www.liquibase.org](http://www.liquibase.org). Liquibase compares the contents of a Change Log to the database to determine which, if any, changes need to be applied to the database. For example, you can create tables, add columns, and many more with Liquibase. Liquibase is delivered via a Docker container to assist users that are leveraging Docker for their CI/CD solution. @@ -10,10 +10,14 @@ Liquibase compares the contents of a Change Log to the database to determine whi If you are executing Liquibase via the command line today, you are probably doing it like so: -`liquibase update --driver=org.postgresql.Driver --url=”jdbc:postgresql://:/” --changeLogFile=/liquibase/changelog/changelog.xml --username= --password=` +```console +$ liquibase update --driver=org.postgresql.Driver --url=”jdbc:postgresql://:/” --changeLogFile=/liquibase/changelog/changelog.xml --username= --password= +``` The only change to use this docker image, is to use `docker run ...` and mount the folder containing your changelog.xml (or .yml or .json or .sql) to `/liquibase/changelog` in the Liquibase container -`docker run -v /home/user/changelog:/liquibase/changelog liquibase --driver=org.postgresql.Driver --url=”jdbc:postgresql://:/” --changeLogFile=/liquibase/changelog/changelog.xml --username= --password=` +```console +$ docker run -v /home/user/changelog:/liquibase/changelog liquibase --driver=org.postgresql.Driver --url=”jdbc:postgresql://:/” --changeLogFile=/liquibase/changelog/changelog.xml --username= --password= +``` All Liquibase commands, such as `rollback`, `updateSQL`, and others, are available, as well. \ No newline at end of file From d46a8312413015a855f4ba1fc938bcb8b4d97ae8 Mon Sep 17 00:00:00 2001 From: Alejandro Alvarez Date: Tue, 9 Apr 2024 08:06:55 +0200 Subject: [PATCH 04/15] Update liquibase/content.md to fix bad quotes Co-authored-by: Tianon Gravi --- liquibase/content.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/liquibase/content.md b/liquibase/content.md index bc9a7504cfda..202ad533dabb 100644 --- a/liquibase/content.md +++ b/liquibase/content.md @@ -11,7 +11,7 @@ Liquibase compares the contents of a Change Log to the database to determine whi If you are executing Liquibase via the command line today, you are probably doing it like so: ```console -$ liquibase update --driver=org.postgresql.Driver --url=”jdbc:postgresql://:/” --changeLogFile=/liquibase/changelog/changelog.xml --username= --password= +$ liquibase update --driver=org.postgresql.Driver --url="jdbc:postgresql://:/" --changeLogFile=/liquibase/changelog/changelog.xml --username= --password= ``` The only change to use this docker image, is to use `docker run ...` and mount the folder containing your changelog.xml (or .yml or .json or .sql) to `/liquibase/changelog` in the Liquibase container From ddc68a3240ea776ca77a6f6fa6ee5e9f2cc3a4da Mon Sep 17 00:00:00 2001 From: Alejandro Alvarez Date: Tue, 9 Apr 2024 08:07:29 +0200 Subject: [PATCH 05/15] Update liquibase/content.md to fix bad quotes Co-authored-by: Tianon Gravi --- liquibase/content.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/liquibase/content.md b/liquibase/content.md index 202ad533dabb..7db61a2606e6 100644 --- a/liquibase/content.md +++ b/liquibase/content.md @@ -17,7 +17,7 @@ $ liquibase update --driver=org.postgresql.Driver --url="jdbc:postgresql://:/” --changeLogFile=/liquibase/changelog/changelog.xml --username= --password= +$ docker run -v /home/user/changelog:/liquibase/changelog %%IMAGE%% --driver=org.postgresql.Driver --url="jdbc:postgresql://:/" --changeLogFile=/liquibase/changelog/changelog.xml --username= --password= ``` All Liquibase commands, such as `rollback`, `updateSQL`, and others, are available, as well. \ No newline at end of file From 3deb1311ff3f8fb22982aa519168e9dfdd992374 Mon Sep 17 00:00:00 2001 From: jandroav Date: Tue, 9 Apr 2024 08:13:06 +0200 Subject: [PATCH 06/15] chore(liquibase): update github repository link in github-repo file chore(liquibase): update maintainer information in maintainer.md file --- liquibase/github-repo | 2 +- liquibase/maintainer.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/liquibase/github-repo b/liquibase/github-repo index afa7a8afa2b6..2d758d9c20e6 100644 --- a/liquibase/github-repo +++ b/liquibase/github-repo @@ -1 +1 @@ -https://github.com/liquibase/docker \ No newline at end of file +https://github.com/liquibase/docker diff --git a/liquibase/maintainer.md b/liquibase/maintainer.md index e727ff0696ae..74fa2dced1b1 100644 --- a/liquibase/maintainer.md +++ b/liquibase/maintainer.md @@ -1 +1 @@ -../.common-templates/maintainer-community.md \ No newline at end of file +[Liquibase](%%GITHUB-REPO%%) \ No newline at end of file From f3cc0c002c1224201c5aae00dd97ba602747298d Mon Sep 17 00:00:00 2001 From: jandroav Date: Tue, 9 Apr 2024 08:15:53 +0200 Subject: [PATCH 07/15] chore(liquibase): add liquibase docker GitHub repository URL --- liquibase/github-repo | 1 + 1 file changed, 1 insertion(+) diff --git a/liquibase/github-repo b/liquibase/github-repo index 2d758d9c20e6..0bae288d9c74 100644 --- a/liquibase/github-repo +++ b/liquibase/github-repo @@ -1 +1,2 @@ https://github.com/liquibase/docker + From cfd8a61358d9282a8cd99d02a9cc61a8b6fcace8 Mon Sep 17 00:00:00 2001 From: jandroav Date: Tue, 9 Apr 2024 08:16:25 +0200 Subject: [PATCH 08/15] chore(liquibase): remove unnecessary URL from github-repo file --- liquibase/github-repo | 1 - 1 file changed, 1 deletion(-) diff --git a/liquibase/github-repo b/liquibase/github-repo index 0bae288d9c74..2d758d9c20e6 100644 --- a/liquibase/github-repo +++ b/liquibase/github-repo @@ -1,2 +1 @@ https://github.com/liquibase/docker - From 1027f7b6cd885d5593460fb70d8aaef9d262440c Mon Sep 17 00:00:00 2001 From: Alejandro Alvarez Date: Wed, 10 Apr 2024 08:02:27 +0200 Subject: [PATCH 09/15] Update maintainer.md --- liquibase/maintainer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/liquibase/maintainer.md b/liquibase/maintainer.md index 74fa2dced1b1..43a5852a9422 100644 --- a/liquibase/maintainer.md +++ b/liquibase/maintainer.md @@ -1 +1 @@ -[Liquibase](%%GITHUB-REPO%%) \ No newline at end of file +[Liquibase](%%GITHUB-REPO%%) From c8c13ea45592edbb7b9d343d1de61949539b6559 Mon Sep 17 00:00:00 2001 From: Alejandro Alvarez Date: Wed, 10 Apr 2024 08:02:48 +0200 Subject: [PATCH 10/15] Update content.md --- liquibase/content.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/liquibase/content.md b/liquibase/content.md index 7db61a2606e6..b0b21d2f1cb0 100644 --- a/liquibase/content.md +++ b/liquibase/content.md @@ -20,4 +20,4 @@ The only change to use this docker image, is to use `docker run ...` and mount t $ docker run -v /home/user/changelog:/liquibase/changelog %%IMAGE%% --driver=org.postgresql.Driver --url="jdbc:postgresql://:/" --changeLogFile=/liquibase/changelog/changelog.xml --username= --password= ``` -All Liquibase commands, such as `rollback`, `updateSQL`, and others, are available, as well. \ No newline at end of file +All Liquibase commands, such as `rollback`, `updateSQL`, and others, are available, as well. From 80b59f075a310574834585d7e6b896d5db2b2ad9 Mon Sep 17 00:00:00 2001 From: Alejandro Alvarez Date: Wed, 10 Apr 2024 08:03:23 +0200 Subject: [PATCH 11/15] Update license.md --- liquibase/license.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/liquibase/license.md b/liquibase/license.md index 6bca3921a56a..f80fe12052df 100644 --- a/liquibase/license.md +++ b/liquibase/license.md @@ -1 +1 @@ -View [license information](https://github.com/liquibase/liquibase/blob/master/LICENSE.txt) for the Liquibase software contained in this image. \ No newline at end of file +View [license information](https://github.com/liquibase/liquibase/blob/master/LICENSE.txt) for the Liquibase software contained in this image. From b8f6a6b1360a05f8e818df6a2e85d7500f64cbfc Mon Sep 17 00:00:00 2001 From: Sayali Mohadikar <76010603+sayaliM0412@users.noreply.github.com> Date: Wed, 26 Jun 2024 15:24:52 -0500 Subject: [PATCH 12/15] Update README.md to add a scarf.sh pixel (#13) --- liquibase/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/liquibase/README.md b/liquibase/README.md index b677c2062966..95b9417a11b4 100644 --- a/liquibase/README.md +++ b/liquibase/README.md @@ -95,3 +95,5 @@ As with all Docker images, these likely also contain other software which may be Some additional license information which was able to be auto-detected might be found in [the `repo-info` repository's `liquibase/` directory](https://github.com/docker-library/repo-info/tree/master/repos/liquibase). As for any pre-built image usage, it is the image user's responsibility to ensure that any use of this image complies with any relevant licenses for all software contained within. + + From c745f11d2cd541b8ca22489db25efe4c7d4cddf2 Mon Sep 17 00:00:00 2001 From: Alejandro Alvarez Date: Fri, 20 Jun 2025 14:24:36 +0200 Subject: [PATCH 13/15] Add maintainer documentation and metadata for Liquibase Pro - Created maintainer.md to provide essential information about the Liquibase project. - Added metadata.json to categorize the project under developer-tools in the hub. --- liquibase-pro/README-short.txt | 1 + liquibase-pro/README.md | 100 +++++++++++++++++++++++++++++++++ liquibase-pro/content.md | 23 ++++++++ liquibase-pro/github-repo | 1 + liquibase-pro/license.md | 1 + liquibase-pro/logo.png | Bin 0 -> 39491 bytes liquibase-pro/maintainer.md | 1 + liquibase-pro/metadata.json | 7 +++ 8 files changed, 134 insertions(+) create mode 100644 liquibase-pro/README-short.txt create mode 100644 liquibase-pro/README.md create mode 100644 liquibase-pro/content.md create mode 100644 liquibase-pro/github-repo create mode 100644 liquibase-pro/license.md create mode 100644 liquibase-pro/logo.png create mode 100644 liquibase-pro/maintainer.md create mode 100644 liquibase-pro/metadata.json diff --git a/liquibase-pro/README-short.txt b/liquibase-pro/README-short.txt new file mode 100644 index 000000000000..fb08a9ad6f19 --- /dev/null +++ b/liquibase-pro/README-short.txt @@ -0,0 +1 @@ +Liquibase is DevOps for your database. \ No newline at end of file diff --git a/liquibase-pro/README.md b/liquibase-pro/README.md new file mode 100644 index 000000000000..05296d3e6885 --- /dev/null +++ b/liquibase-pro/README.md @@ -0,0 +1,100 @@ + + +# Quick reference + +- **Maintained by**: + [Liquibase](https://github.com/liquibase/docker) + +- **Where to get help**: + [the Docker Community Slack](https://dockr.ly/comm-slack), [Server Fault](https://serverfault.com/help/on-topic), [Unix & Linux](https://unix.stackexchange.com/help/on-topic), or [Stack Overflow](https://stackoverflow.com/help/on-topic) + +# Supported tags and respective `Dockerfile` links + +- [`4.32`, `4.32.0`, `latest`](https://github.com/liquibase/docker/blob/5f25f074861b619a8bd3a3147d3ceeafb672f717/Dockerfile) + +- [`4.32-alpine`, `4.32.0-alpine`, `alpine`](https://github.com/liquibase/docker/blob/5f25f074861b619a8bd3a3147d3ceeafb672f717/Dockerfile.alpine) + +# Quick reference (cont.) + +- **Where to file issues**: + [https://github.com/liquibase/docker/issues](https://github.com/liquibase/docker/issues?q=) + +- **Supported architectures**: ([more info](https://github.com/docker-library/official-images#architectures-other-than-amd64)) + [`amd64`](https://hub.docker.com/r/amd64/liquibase/), [`arm64v8`](https://hub.docker.com/r/arm64v8/liquibase/) + +- **Published image artifact details**: + [repo-info repo's `repos/liquibase/` directory](https://github.com/docker-library/repo-info/blob/master/repos/liquibase) ([history](https://github.com/docker-library/repo-info/commits/master/repos/liquibase)) + (image metadata, transfer size, etc) + +- **Image updates**: + [official-images repo's `library/liquibase` label](https://github.com/docker-library/official-images/issues?q=label%3Alibrary%2Fliquibase) + [official-images repo's `library/liquibase` file](https://github.com/docker-library/official-images/blob/master/library/liquibase) ([history](https://github.com/docker-library/official-images/commits/master/library/liquibase)) + +- **Source of this description**: + [docs repo's `liquibase/` directory](https://github.com/docker-library/docs/tree/master/liquibase) ([history](https://github.com/docker-library/docs/commits/master/liquibase)) + +# What is Liquibase? + +Liquibase is DevOps for your database. More information about Liquibase can be found at [http://www.liquibase.org](http://www.liquibase.org). + +Liquibase compares the contents of a Change Log to the database to determine which, if any, changes need to be applied to the database. For example, you can create tables, add columns, and many more with Liquibase. Liquibase is delivered via a Docker container to assist users that are leveraging Docker for their CI/CD solution. + +![logo](https://raw.githubusercontent.com/docker-library/docs/bb4f7e2d534d1c4f62ef19bc6b09489e9ba3d8cc/liquibase/logo.png) + +# How to use this image + +If you are executing Liquibase via the command line today, you are probably doing it like so: + +```console +$ liquibase update --driver=org.postgresql.Driver --url="jdbc:postgresql://:/" --changeLogFile=/liquibase/changelog/changelog.xml --username= --password= +``` + +The only change to use this docker image, is to use `docker run ...` and mount the folder containing your changelog.xml (or .yml or .json or .sql) to `/liquibase/changelog` in the Liquibase container + +```console +$ docker run -v /home/user/changelog:/liquibase/changelog liquibase --driver=org.postgresql.Driver --url="jdbc:postgresql://:/" --changeLogFile=/liquibase/changelog/changelog.xml --username= --password= +``` + +All Liquibase commands, such as `rollback`, `updateSQL`, and others, are available, as well. + +# Image Variants + +The `liquibase` images come in many flavors, each designed for a specific use case. + +## `liquibase:` + +This is the defacto image. If you are unsure about what your needs are, you probably want to use this one. It is designed to be used both as a throw away container (mount your source code and start the container to start your app), as well as the base to build other images off of. + +## `liquibase:-alpine` + +This image is based on the popular [Alpine Linux project](https://alpinelinux.org), available in [the `alpine` official image](https://hub.docker.com/_/alpine). Alpine Linux is much smaller than most distribution base images (~5MB), and thus leads to much slimmer images in general. + +This variant is useful when final image size being as small as possible is your primary concern. The main caveat to note is that it does use [musl libc](https://musl.libc.org) instead of [glibc and friends](https://www.etalabs.net/compare_libcs.html), so software will often run into issues depending on the depth of their libc requirements/assumptions. See [this Hacker News comment thread](https://news.ycombinator.com/item?id=10782897) for more discussion of the issues that might arise and some pro/con comparisons of using Alpine-based images. + +To minimize image size, it's uncommon for additional related tools (such as `git` or `bash`) to be included in Alpine-based images. Using this image as a base, add the things you need in your own Dockerfile (see the [`alpine` image description](https://hub.docker.com/_/alpine/) for examples of how to install packages if you are unfamiliar). + +# License + +View [license information](https://github.com/liquibase/liquibase/blob/master/LICENSE.txt) for the Liquibase software contained in this image. + +As with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained). + +Some additional license information which was able to be auto-detected might be found in [the `repo-info` repository's `liquibase/` directory](https://github.com/docker-library/repo-info/tree/master/repos/liquibase). + +As for any pre-built image usage, it is the image user's responsibility to ensure that any use of this image complies with any relevant licenses for all software contained within. + + diff --git a/liquibase-pro/content.md b/liquibase-pro/content.md new file mode 100644 index 000000000000..b0b21d2f1cb0 --- /dev/null +++ b/liquibase-pro/content.md @@ -0,0 +1,23 @@ +# What is Liquibase? + +Liquibase is DevOps for your database. More information about Liquibase can be found at [http://www.liquibase.org](http://www.liquibase.org). + +Liquibase compares the contents of a Change Log to the database to determine which, if any, changes need to be applied to the database. For example, you can create tables, add columns, and many more with Liquibase. Liquibase is delivered via a Docker container to assist users that are leveraging Docker for their CI/CD solution. + +%%LOGO%% + +# How to use this image + +If you are executing Liquibase via the command line today, you are probably doing it like so: + +```console +$ liquibase update --driver=org.postgresql.Driver --url="jdbc:postgresql://:/" --changeLogFile=/liquibase/changelog/changelog.xml --username= --password= +``` + +The only change to use this docker image, is to use `docker run ...` and mount the folder containing your changelog.xml (or .yml or .json or .sql) to `/liquibase/changelog` in the Liquibase container + +```console +$ docker run -v /home/user/changelog:/liquibase/changelog %%IMAGE%% --driver=org.postgresql.Driver --url="jdbc:postgresql://:/" --changeLogFile=/liquibase/changelog/changelog.xml --username= --password= +``` + +All Liquibase commands, such as `rollback`, `updateSQL`, and others, are available, as well. diff --git a/liquibase-pro/github-repo b/liquibase-pro/github-repo new file mode 100644 index 000000000000..2d758d9c20e6 --- /dev/null +++ b/liquibase-pro/github-repo @@ -0,0 +1 @@ +https://github.com/liquibase/docker diff --git a/liquibase-pro/license.md b/liquibase-pro/license.md new file mode 100644 index 000000000000..f80fe12052df --- /dev/null +++ b/liquibase-pro/license.md @@ -0,0 +1 @@ +View [license information](https://github.com/liquibase/liquibase/blob/master/LICENSE.txt) for the Liquibase software contained in this image. diff --git a/liquibase-pro/logo.png b/liquibase-pro/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9f6d31750b24aff850e96686f011f4a6b49f7172 GIT binary patch literal 39491 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 literal 0 HcmV?d00001 diff --git a/liquibase-pro/maintainer.md b/liquibase-pro/maintainer.md new file mode 100644 index 000000000000..43a5852a9422 --- /dev/null +++ b/liquibase-pro/maintainer.md @@ -0,0 +1 @@ +[Liquibase](%%GITHUB-REPO%%) diff --git a/liquibase-pro/metadata.json b/liquibase-pro/metadata.json new file mode 100644 index 000000000000..67e782480585 --- /dev/null +++ b/liquibase-pro/metadata.json @@ -0,0 +1,7 @@ +{ + "hub": { + "categories": [ + "developer-tools" + ] + } +} From f4b8e373a3fee704fe2a739b7faa1007c528f675 Mon Sep 17 00:00:00 2001 From: Alejandro Alvarez Date: Fri, 27 Jun 2025 11:15:48 +0200 Subject: [PATCH 14/15] Update Liquibase Pro docs and license for enterprise edition - Remove outdated README.md - Expand content.md with Pro features, usage, and examples - Update license.md with Pro licensing and contact info - Clar --- liquibase-pro/README-short.txt | 2 +- liquibase-pro/README.md | 100 -------------- liquibase-pro/content.md | 239 +++++++++++++++++++++++++++++++-- liquibase-pro/license.md | 12 +- 4 files changed, 239 insertions(+), 114 deletions(-) delete mode 100644 liquibase-pro/README.md diff --git a/liquibase-pro/README-short.txt b/liquibase-pro/README-short.txt index fb08a9ad6f19..7db17172097b 100644 --- a/liquibase-pro/README-short.txt +++ b/liquibase-pro/README-short.txt @@ -1 +1 @@ -Liquibase is DevOps for your database. \ No newline at end of file +Liquibase Pro is DevOps for your database. \ No newline at end of file diff --git a/liquibase-pro/README.md b/liquibase-pro/README.md deleted file mode 100644 index 05296d3e6885..000000000000 --- a/liquibase-pro/README.md +++ /dev/null @@ -1,100 +0,0 @@ - - -# Quick reference - -- **Maintained by**: - [Liquibase](https://github.com/liquibase/docker) - -- **Where to get help**: - [the Docker Community Slack](https://dockr.ly/comm-slack), [Server Fault](https://serverfault.com/help/on-topic), [Unix & Linux](https://unix.stackexchange.com/help/on-topic), or [Stack Overflow](https://stackoverflow.com/help/on-topic) - -# Supported tags and respective `Dockerfile` links - -- [`4.32`, `4.32.0`, `latest`](https://github.com/liquibase/docker/blob/5f25f074861b619a8bd3a3147d3ceeafb672f717/Dockerfile) - -- [`4.32-alpine`, `4.32.0-alpine`, `alpine`](https://github.com/liquibase/docker/blob/5f25f074861b619a8bd3a3147d3ceeafb672f717/Dockerfile.alpine) - -# Quick reference (cont.) - -- **Where to file issues**: - [https://github.com/liquibase/docker/issues](https://github.com/liquibase/docker/issues?q=) - -- **Supported architectures**: ([more info](https://github.com/docker-library/official-images#architectures-other-than-amd64)) - [`amd64`](https://hub.docker.com/r/amd64/liquibase/), [`arm64v8`](https://hub.docker.com/r/arm64v8/liquibase/) - -- **Published image artifact details**: - [repo-info repo's `repos/liquibase/` directory](https://github.com/docker-library/repo-info/blob/master/repos/liquibase) ([history](https://github.com/docker-library/repo-info/commits/master/repos/liquibase)) - (image metadata, transfer size, etc) - -- **Image updates**: - [official-images repo's `library/liquibase` label](https://github.com/docker-library/official-images/issues?q=label%3Alibrary%2Fliquibase) - [official-images repo's `library/liquibase` file](https://github.com/docker-library/official-images/blob/master/library/liquibase) ([history](https://github.com/docker-library/official-images/commits/master/library/liquibase)) - -- **Source of this description**: - [docs repo's `liquibase/` directory](https://github.com/docker-library/docs/tree/master/liquibase) ([history](https://github.com/docker-library/docs/commits/master/liquibase)) - -# What is Liquibase? - -Liquibase is DevOps for your database. More information about Liquibase can be found at [http://www.liquibase.org](http://www.liquibase.org). - -Liquibase compares the contents of a Change Log to the database to determine which, if any, changes need to be applied to the database. For example, you can create tables, add columns, and many more with Liquibase. Liquibase is delivered via a Docker container to assist users that are leveraging Docker for their CI/CD solution. - -![logo](https://raw.githubusercontent.com/docker-library/docs/bb4f7e2d534d1c4f62ef19bc6b09489e9ba3d8cc/liquibase/logo.png) - -# How to use this image - -If you are executing Liquibase via the command line today, you are probably doing it like so: - -```console -$ liquibase update --driver=org.postgresql.Driver --url="jdbc:postgresql://:/" --changeLogFile=/liquibase/changelog/changelog.xml --username= --password= -``` - -The only change to use this docker image, is to use `docker run ...` and mount the folder containing your changelog.xml (or .yml or .json or .sql) to `/liquibase/changelog` in the Liquibase container - -```console -$ docker run -v /home/user/changelog:/liquibase/changelog liquibase --driver=org.postgresql.Driver --url="jdbc:postgresql://:/" --changeLogFile=/liquibase/changelog/changelog.xml --username= --password= -``` - -All Liquibase commands, such as `rollback`, `updateSQL`, and others, are available, as well. - -# Image Variants - -The `liquibase` images come in many flavors, each designed for a specific use case. - -## `liquibase:` - -This is the defacto image. If you are unsure about what your needs are, you probably want to use this one. It is designed to be used both as a throw away container (mount your source code and start the container to start your app), as well as the base to build other images off of. - -## `liquibase:-alpine` - -This image is based on the popular [Alpine Linux project](https://alpinelinux.org), available in [the `alpine` official image](https://hub.docker.com/_/alpine). Alpine Linux is much smaller than most distribution base images (~5MB), and thus leads to much slimmer images in general. - -This variant is useful when final image size being as small as possible is your primary concern. The main caveat to note is that it does use [musl libc](https://musl.libc.org) instead of [glibc and friends](https://www.etalabs.net/compare_libcs.html), so software will often run into issues depending on the depth of their libc requirements/assumptions. See [this Hacker News comment thread](https://news.ycombinator.com/item?id=10782897) for more discussion of the issues that might arise and some pro/con comparisons of using Alpine-based images. - -To minimize image size, it's uncommon for additional related tools (such as `git` or `bash`) to be included in Alpine-based images. Using this image as a base, add the things you need in your own Dockerfile (see the [`alpine` image description](https://hub.docker.com/_/alpine/) for examples of how to install packages if you are unfamiliar). - -# License - -View [license information](https://github.com/liquibase/liquibase/blob/master/LICENSE.txt) for the Liquibase software contained in this image. - -As with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained). - -Some additional license information which was able to be auto-detected might be found in [the `repo-info` repository's `liquibase/` directory](https://github.com/docker-library/repo-info/tree/master/repos/liquibase). - -As for any pre-built image usage, it is the image user's responsibility to ensure that any use of this image complies with any relevant licenses for all software contained within. - - diff --git a/liquibase-pro/content.md b/liquibase-pro/content.md index b0b21d2f1cb0..b170f57d6d41 100644 --- a/liquibase-pro/content.md +++ b/liquibase-pro/content.md @@ -1,23 +1,238 @@ -# What is Liquibase? +# Official Liquibase-Pro Docker Images -Liquibase is DevOps for your database. More information about Liquibase can be found at [http://www.liquibase.org](http://www.liquibase.org). +**Liquibase Pro** is the enterprise edition of Liquibase that provides advanced database DevOps capabilities for teams requiring enhanced security, performance, and governance features. -Liquibase compares the contents of a Change Log to the database to determine which, if any, changes need to be applied to the database. For example, you can create tables, add columns, and many more with Liquibase. Liquibase is delivered via a Docker container to assist users that are leveraging Docker for their CI/CD solution. +## ⚠️ License Requirements -%%LOGO%% +> **WARNING**: Liquibase Pro requires a valid license key to use Pro features. Without a license, the container will run in Liquibase Community mode with limited functionality. +> +> - Contact [Liquibase Sales](https://www.liquibase.com/community/contact) to obtain a Pro license +> - Existing customers receive their Pro license keys in an email. -# How to use this image +## 📋 Pro Features -If you are executing Liquibase via the command line today, you are probably doing it like so: +Liquibase Pro is the enterprise edition of [Liquibase](https://www.liquibase.com/) that provides advanced database DevOps capabilities for teams requiring enhanced security, performance, and governance features. -```console -$ liquibase update --driver=org.postgresql.Driver --url="jdbc:postgresql://:/" --changeLogFile=/liquibase/changelog/changelog.xml --username= --password= +Liquibase Pro includes all Community features plus: + +### 🔐 Security & Governance + +- **Policy Checks**: Enforce database standards and best practices +- **Quality Checks**: Advanced validation rules for changesets +- **Rollback SQL**: Generate rollback scripts for any deployment +- **Targeted Rollback**: Rollback specific changesets without affecting others +- **Advanced Database Support**: Enhanced support for Oracle, SQL Server, and other enterprise databases +- **Audit Reports**: Comprehensive tracking of database changes +- **Stored Logic**: Support for functions, procedures, packages, and triggers + +## 🔧 Environment Variables + +### Pro License Environment Variable + +| Variable | Description | Example | +|----------|-------------|---------| +| `LIQUIBASE_LICENSE_KEY` | Your Liquibase Pro license key | `ABcd-1234-EFGH-5678` | + +### 🔧 Action Required + +Please update your Dockerfiles and scripts to pull from the new official image: + +## Available Registries + +We publish this image to multiple registries: + +| Registry | Pro Image | +|----------|-----------| +| **Docker Hub (default)** | `liquibase/liquibase-pro` | +| **GitHub Container Registry** | `ghcr.io/liquibase/liquibase-pro` | +| **Amazon ECR Public** | `public.ecr.aws/liquibase/liquibase-pro` | + +## Dockerfile + +```dockerfile +FROM liquibase/liquibase-pro:latest +# OR ghcr.io/liquibase/liquibase-pro:latest # GHCR +# OR public.ecr.aws/liquibase/liquibase-pro:latest # Amazon ECR Public ``` -The only change to use this docker image, is to use `docker run ...` and mount the folder containing your changelog.xml (or .yml or .json or .sql) to `/liquibase/changelog` in the Liquibase container +## Scripts -```console -$ docker run -v /home/user/changelog:/liquibase/changelog %%IMAGE%% --driver=org.postgresql.Driver --url="jdbc:postgresql://:/" --changeLogFile=/liquibase/changelog/changelog.xml --username= --password= +### Pro Edition + +```bash +# Docker Hub (default) +docker pull liquibase/liquibase-pro + +# GitHub Container Registry +docker pull ghcr.io/liquibase/liquibase-pro + +# Amazon ECR Public +docker pull public.ecr.aws/liquibase/liquibase-pro ``` -All Liquibase commands, such as `rollback`, `updateSQL`, and others, are available, as well. +### Pulling the Latest or Specific Version + +#### Pulling Pro Edition Images + +```bash +# Latest +docker pull liquibase/liquibase-pro:latest +docker pull ghcr.io/liquibase/liquibase-pro:latest +docker pull public.ecr.aws/liquibase/liquibase-pro:latest + +# Specific version (example: 4.32.0) +docker pull liquibase/liquibase-pro:4.32.0 +docker pull ghcr.io/liquibase/liquibase-pro:4.32.0 +docker pull public.ecr.aws/liquibase/liquibase-pro:4.32.0 +``` + +For any questions or support, please visit our [Liquibase Community Forum](https://forum.liquibase.org/). + +## 🏷️ Supported Tags + +The following tags are officially supported and can be found on [Docker Hub](https://hub.docker.com/r/liquibase/liquibase-pro/tags): + +- `liquibase/liquibase-pro:` + +### Database Connection Variables + +| Variable | Description | Example | +|----------|-------------|---------| +| `LIQUIBASE_COMMAND_URL` | Database JDBC URL | `jdbc:postgresql://db:5432/mydb` | +| `LIQUIBASE_COMMAND_USERNAME` | Database username | `dbuser` | +| `LIQUIBASE_COMMAND_PASSWORD` | Database password | `dbpass` | +| `LIQUIBASE_COMMAND_CHANGELOG_FILE` | Path to changelog file | `/liquibase/changelog/changelog.xml` | + +### Pro-Specific Configuration + +| Variable | Description | Default | +|----------|-------------|---------| +| `LIQUIBASE_PRO_POLICY_CHECKS_ENABLED` | Enable policy checks | `true` | +| `LIQUIBASE_PRO_QUALITY_CHECKS_ENABLED` | Enable quality checks | `true` | +| `LIQUIBASE_REPORTS_ENABLED` | Enable HTML reports | `true` | +| `LIQUIBASE_REPORTS_PATH` | Reports output directory | `/tmp/reports` | + +## Required License Configuration + +Set your Liquibase Pro license key using the `LIQUIBASE_LICENSE_KEY` environment variable: + +```bash +$ docker run --rm \ + -e LIQUIBASE_LICENSE_KEY="YOUR_LICENSE_KEY_HERE" \ + -v /path/to/changelog:/liquibase/changelog \ + liquibase/liquibase-pro \ + --changelog-file=example-changelog.xml \ + --url="jdbc:postgresql://host.docker.internal:5432/testdb" \ + --username=postgres \ + --password=password \ + --search-path=/liquibase/changelog/ \ + update +``` + +## Mounting Changelog Files + +Mount your changelog directory to the `/liquibase/changelog` volume and use the `--search-path` parameter to specify the location. + +```bash +$ docker run --rm \ + -e LIQUIBASE_LICENSE_KEY="YOUR_LICENSE_KEY_HERE" \ + -v "$(pwd)":/liquibase/changelog \ + liquibase/liquibase-pro \ + --changelog-file=example-changelog.xml \ + --search-path=/liquibase/changelog/ \ + update +``` + +## Using a Properties File + +To use a default configuration file, mount it in your changelog volume and reference it with the `--defaults-file` argument. + +```bash +$ docker run --rm \ + -e LIQUIBASE_LICENSE_KEY="YOUR_LICENSE_KEY_HERE" \ + -v /path/to/changelog:/liquibase/changelog \ + liquibase/liquibase-pro \ + --defaults-file=liquibase.properties update +``` + +Example `liquibase.properties` file: + +```bash +url=jdbc:postgresql://host.docker.internal:5432/testdb +username=postgres +password=password +changelog-file=example-changelog.xml +search-path=/liquibase/changelog/ +licenseKey= +``` + +## Adding Additional JARs + +Mount a local directory containing additional jars to `/liquibase/lib`. + +```bash +$ docker run --rm \ + -e LIQUIBASE_LICENSE_KEY="YOUR_LICENSE_KEY_HERE" \ + -v /path/to/changelog:/liquibase/changelog \ + -v /path/to/lib:/liquibase/lib \ + liquibase/liquibase-pro update + +## 📦 Using the Docker Image + +### 🏷️ Standard Image + +The `liquibase/liquibase-pro:` image is the standard choice. Use it as a disposable container or a foundational building block for other images. + +For examples of extending the standard image, see the [standard image examples](https://github.com/liquibase/docker/tree/main/examples). + + +**Usage:** + +```bash +# Build the image +docker build . -t liquibase-pro-aws + +# Run with AWS credentials +docker run --rm \ + -e AWS_ACCESS_KEY_ID="your-access-key" \ + -e AWS_SECRET_ACCESS_KEY="your-secret-key" \ + -e LIQUIBASE_LICENSE_KEY="your-license-key" \ + -v "$(pwd)":/liquibase/changelog \ + liquibase-pro-aws \ + --changelog-file=changelog.xml \ + --search-path=/liquibase/changelog/ \ + update +``` + +### 🐳 Docker Compose Example + +For a complete example using Docker Compose with PostgreSQL: + +```yaml +version: '3.8' +services: + liquibase: + image: liquibase/liquibase-pro:latest + environment: + LIQUIBASE_LICENSE_KEY: "${LIQUIBASE_LICENSE_KEY}" + LIQUIBASE_COMMAND_URL: "jdbc:postgresql://postgres:5432/example" + LIQUIBASE_COMMAND_USERNAME: "liquibase" + LIQUIBASE_COMMAND_PASSWORD: "liquibase" + LIQUIBASE_COMMAND_CHANGELOG_FILE: "changelog.xml" + volumes: + - ./changelog:/liquibase/changelog + depends_on: + - postgres + command: update + + postgres: + image: postgres:15 + environment: + POSTGRES_DB: example + POSTGRES_USER: liquibase + POSTGRES_PASSWORD: liquibase + ports: + - "5432:5432" +``` + + diff --git a/liquibase-pro/license.md b/liquibase-pro/license.md index f80fe12052df..4b852314c592 100644 --- a/liquibase-pro/license.md +++ b/liquibase-pro/license.md @@ -1 +1,11 @@ -View [license information](https://github.com/liquibase/liquibase/blob/master/LICENSE.txt) for the Liquibase software contained in this image. +This Docker image contains Liquibase Pro software which requires a valid commercial license for use. + +For licensing questions, please contact [Liquibase Sales](https://www.liquibase.com/contact). + +View [license information](https://www.liquibase.com/eula) for the software contained in this image. + +As with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained). + +Some additional license information which was able to be auto-detected might be found in [the `repo-info` repository's `liquibase/` directory](https://github.com/docker-library/repo-info/tree/master/repos/liquibase). + +As for any pre-built image usage, it is the image user's responsibility to ensure that any use of this image complies with any relevant licenses for all software contained within. \ No newline at end of file From 23ea04cce8c3c965140bdc944923e4a321cbdd14 Mon Sep 17 00:00:00 2001 From: Alejandro Alvarez Date: Fri, 27 Jun 2025 11:19:54 +0200 Subject: [PATCH 15/15] ify product name in README-short.txt Remove tracking image from README --- liquibase/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/liquibase/README.md b/liquibase/README.md index 05296d3e6885..a142515eea45 100644 --- a/liquibase/README.md +++ b/liquibase/README.md @@ -96,5 +96,3 @@ As with all Docker images, these likely also contain other software which may be Some additional license information which was able to be auto-detected might be found in [the `repo-info` repository's `liquibase/` directory](https://github.com/docker-library/repo-info/tree/master/repos/liquibase). As for any pre-built image usage, it is the image user's responsibility to ensure that any use of this image complies with any relevant licenses for all software contained within. - -