From e100278ca80ed3ef1d11ecacae88e01ce5b334ff Mon Sep 17 00:00:00 2001 From: Kaur Palang Date: Thu, 3 Jul 2025 22:08:01 +0300 Subject: [PATCH 1/3] First commit for templated Dockerfiles Signed-off-by: Kaur Palang --- .dockerignore | 2 + deploy/entrypoint.sh => entrypoint.sh | 0 releases.yaml | 38 ++++++++++++ render_docker_images.sh | 5 ++ templates/Dockerfile.tpl | 85 +++++++++++++++++++++++++++ templates/compose.yaml.tpl | 47 +++++++++++++++ 6 files changed, 177 insertions(+) create mode 100644 .dockerignore rename deploy/entrypoint.sh => entrypoint.sh (100%) create mode 100644 releases.yaml create mode 100755 render_docker_images.sh create mode 100644 templates/Dockerfile.tpl create mode 100644 templates/compose.yaml.tpl diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..864179f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +* +!entrypoint.sh diff --git a/deploy/entrypoint.sh b/entrypoint.sh similarity index 100% rename from deploy/entrypoint.sh rename to entrypoint.sh diff --git a/releases.yaml b/releases.yaml new file mode 100644 index 0000000..a0f2c6d --- /dev/null +++ b/releases.yaml @@ -0,0 +1,38 @@ +# Specifies which slug should gain the "latest" tags +latest: 4.5.2-tp.1 + +# Sets the alpine image tag for the downloader stage +downloaderTag: 3.21.3 + +uid: 1000 +gid: 1000 + +# Add OCI best-practice labels https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys +labels: |- + "org.opencontainers.image.authors"="The Open Integration Engine Project and contributors" \ + "org.opencontainers.image.created"="${CREATED_AT?:}" \ + "org.opencontainers.image.description"="An open source fork of the now closed-source Mirth Connect" \ + "org.opencontainers.image.licenses"="MPL-2.0" \ + "org.opencontainers.image.source"="https://github.com/OpenIntegrationEngine/engine-docker" \ + "org.opencontainers.image.title"="Open Integration Engine" \ + "org.opencontainers.image.url"="https://github.com/OpenIntegrationEngine/engine" \ + "org.opencontainers.image.vendor"="The Open Integration Engine Project" \ + "org.opencontainers.image.version"="{{ .slug }}" + +versions: + - slug: 4.5.2-tp.1 + releaseVersion: 4.5.2 + releaseUrl: https://github.com/OpenIntegrationEngine/engine/releases/download/v4.5.2-tp.1/oie_unix_4_5_2.tar.gz + tags: + - distro: ubuntu + type: jre + tag: 17.0.15_6-jre-noble + - distro: ubuntu + type: jdk + tag: 17.0.15_6-jdk-noble + - distro: alpine + type: jre + tag: 17.0.15_6-jre-alpine + - distro: alpine + type: jdk + tag: 17.0.15_6-jdk-alpine diff --git a/render_docker_images.sh b/render_docker_images.sh new file mode 100755 index 0000000..c4a8e0e --- /dev/null +++ b/render_docker_images.sh @@ -0,0 +1,5 @@ +# Render Dockerfiles +gomplate -V -c .=releases.yaml -f templates/Dockerfile.tpl + +# Render compose files +gomplate -V -c .=releases.yaml -f templates/compose.yaml.tpl diff --git a/templates/Dockerfile.tpl b/templates/Dockerfile.tpl new file mode 100644 index 0000000..8a111be --- /dev/null +++ b/templates/Dockerfile.tpl @@ -0,0 +1,85 @@ +{{/* Collect all root elements except "versions" into a variable */}} +{{- $config := coll.Omit "versions" . -}} + +{{/* Create gomplate specific iteration over versions array */}} +{{- range $version := .versions -}} + {{- $ctx := dict "config" $config "version" $version }} + + {{/* Define paths to render the Dockerfiles to */}} + {{- $outPath := printf "dockerfiles/%s/Dockerfile" $version.slug }} + + {{/* Render the inline template defined below */}} + {{- tmpl.Exec "dockerfile" $ctx | file.Write $outPath }} +{{- end -}} + +{{- define "dockerfile" -}} +# syntax=docker/dockerfile:1 + +################################################################ +# # +# WARNING: THIS FILE IS AUTO-GENERATED. DO NOT EDIT MANUALLY # +# # +################################################################ + +ARG CREATED_AT + +FROM alpine:{{ .config.downloaderTag }} AS downloader + +WORKDIR /opt + +# Download Open Integration Engine release +RUN apk add --no-cache curl \ + && curl -L \ + -o /opt/engine.tar.gz \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + {{ .version.releaseUrl }} \ + && tar xzf engine.tar.gz \ + && mv /opt/oie /opt/engine \ + && mkdir -p /opt/engine/appdata + +WORKDIR /opt/engine +COPY --chmod=755 entrypoint.sh /opt/engine/entrypoint.sh + +RUN rm -rf cli-lib manager-lib \ + && rm mirth-cli-launcher.jar oiecommand + +RUN chown -R {{ $.config.uid }}:{{ $.config.gid }} /opt/engine + +{{- /* Assign current version slug into a variable to carry it into the tags iteration */}} +{{- $slug := dict "slug" .version.slug -}} +{{/* Iterate version tags to generate the final stages */}} +{{- range .version.tags }} +FROM eclipse-temurin:{{ .tag }} AS {{ print .distro "-" .type }} + +ARG CREATED_AT + +LABEL \ +{{/* Render the Labels section to include the slug */}} +{{- tpl $.config.labels $slug | strings.Indent 2 }} + +COPY --from=downloader /opt/engine /opt/engine +{{ if eq .distro "ubuntu" }} +RUN apt-get update \ + && apt-get install -y unzip \ + && rm -rf /var/lib/apt/lists/* \ + && groupmod --new-name engine ubuntu \ + && usermod -l engine ubuntu \ + && usermod -aG engine engine +{{- else if eq .distro "alpine" }} +RUN apk add --no-cache bash unzip \ + && adduser -D -H -u {{ $.config.uid }} engine engine +{{- end }} + +VOLUME /opt/engine/appdata +VOLUME /opt/engine/custom-extensions + +WORKDIR /opt/engine +EXPOSE 8443 +USER engine + +ENTRYPOINT ["./entrypoint.sh"] +CMD ["./oieserver"] +{{ end -}} + +{{ end }} diff --git a/templates/compose.yaml.tpl b/templates/compose.yaml.tpl new file mode 100644 index 0000000..0368b36 --- /dev/null +++ b/templates/compose.yaml.tpl @@ -0,0 +1,47 @@ +{{/* Create gomplate specific iteration over versions array */}} +{{- range $version := .versions -}} + {{- $ctx := dict "latest" $.latest "version" $version }} + + {{/* Define paths to render the Dockerfiles to */}} + {{- $outPath := printf "dockerfiles/%s/compose.yaml" $version.slug }} + + {{/* Render the inline template defined below */}} + {{- tmpl.Exec "composefile" $ctx | file.Write $outPath }} +{{- end -}} + +{{- define "composefile" -}} +################################################################ +# # +# WARNING: THIS FILE IS AUTO-GENERATED. DO NOT EDIT MANUALLY # +# # +################################################################ + +name: open-integration-engine + +{{/* Assign current version slug into a variable to carry it into the tags iteration */}} +{{- $slug := .version.slug -}} +services: + {{- range .version.tags }} + {{ print .distro "-" .type ":" }} + image: openintegrationengine/engine + build: + dockerfile: dockerfiles/{{ $slug }}/Dockerfile + target: {{ .distro }}-{{ .type }} + context: ../../ + platforms: + - linux/amd64 + # - linux/arm64 + tags: + - openintegrationengine/engine:{{ $slug }}-{{ .distro }} + - openintegrationengine/engine:{{ $slug }}-{{ .distro }}-{{ .type }} + {{- if eq $slug $.latest }} + - openintegrationengine/engine:latest-{{ .distro }}-{{ .type }} + {{- if eq .type "jre" }} + - openintegrationengine/engine:latest-{{ .distro }} + {{- if eq .distro "alpine" }} + - openintegrationengine/engine:latest + {{- end }} + {{- end }} + {{- end }} + {{ end }} +{{- end }} From da286775922b9b15dd501ccb890c487b41d6b6bc Mon Sep 17 00:00:00 2001 From: Kaur Palang Date: Thu, 3 Jul 2025 22:08:29 +0300 Subject: [PATCH 2/3] Add rendered files for 4.5.1-tp.1 Signed-off-by: Kaur Palang --- dockerfiles/4.5.2-tp.1/Dockerfile | 159 ++++++++++++++++++++++++++++ dockerfiles/4.5.2-tp.1/compose.yaml | 68 ++++++++++++ 2 files changed, 227 insertions(+) create mode 100644 dockerfiles/4.5.2-tp.1/Dockerfile create mode 100644 dockerfiles/4.5.2-tp.1/compose.yaml diff --git a/dockerfiles/4.5.2-tp.1/Dockerfile b/dockerfiles/4.5.2-tp.1/Dockerfile new file mode 100644 index 0000000..c35cdd1 --- /dev/null +++ b/dockerfiles/4.5.2-tp.1/Dockerfile @@ -0,0 +1,159 @@ +# syntax=docker/dockerfile:1 + +################################################################ +# # +# WARNING: THIS FILE IS AUTO-GENERATED. DO NOT EDIT MANUALLY # +# # +################################################################ + +ARG CREATED_AT + +FROM alpine:3.21.3 AS downloader + +WORKDIR /opt + +# Download Open Integration Engine release +RUN apk add --no-cache curl \ + && curl -L \ + -o /opt/engine.tar.gz \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://github.com/OpenIntegrationEngine/engine/releases/download/v4.5.2-tp.1/oie_unix_4_5_2.tar.gz \ + && tar xzf engine.tar.gz \ + && mv /opt/oie /opt/engine \ + && mkdir -p /opt/engine/appdata + +WORKDIR /opt/engine +COPY --chmod=755 entrypoint.sh /opt/engine/entrypoint.sh + +RUN rm -rf cli-lib manager-lib \ + && rm mirth-cli-launcher.jar oiecommand + +RUN chown -R 1000:1000 /opt/engine +FROM eclipse-temurin:17.0.15_6-jre-noble AS ubuntu-jre + +ARG CREATED_AT + +LABEL \ + "org.opencontainers.image.authors"="The Open Integration Engine Project and contributors" \ + "org.opencontainers.image.created"="${CREATED_AT?:}" \ + "org.opencontainers.image.description"="An open source fork of the now closed-source Mirth Connect" \ + "org.opencontainers.image.licenses"="MPL-2.0" \ + "org.opencontainers.image.source"="https://github.com/OpenIntegrationEngine/engine-docker" \ + "org.opencontainers.image.title"="Open Integration Engine" \ + "org.opencontainers.image.url"="https://github.com/OpenIntegrationEngine/engine" \ + "org.opencontainers.image.vendor"="The Open Integration Engine Project" \ + "org.opencontainers.image.version"="4.5.2-tp.1" + +COPY --from=downloader /opt/engine /opt/engine + +RUN apt-get update \ + && apt-get install -y unzip \ + && rm -rf /var/lib/apt/lists/* \ + && groupmod --new-name engine ubuntu \ + && usermod -l engine ubuntu \ + && usermod -aG engine engine + +VOLUME /opt/engine/appdata +VOLUME /opt/engine/custom-extensions + +WORKDIR /opt/engine +EXPOSE 8443 +USER engine + +ENTRYPOINT ["./entrypoint.sh"] +CMD ["./oieserver"] + +FROM eclipse-temurin:17.0.15_6-jdk-noble AS ubuntu-jdk + +ARG CREATED_AT + +LABEL \ + "org.opencontainers.image.authors"="The Open Integration Engine Project and contributors" \ + "org.opencontainers.image.created"="${CREATED_AT?:}" \ + "org.opencontainers.image.description"="An open source fork of the now closed-source Mirth Connect" \ + "org.opencontainers.image.licenses"="MPL-2.0" \ + "org.opencontainers.image.source"="https://github.com/OpenIntegrationEngine/engine-docker" \ + "org.opencontainers.image.title"="Open Integration Engine" \ + "org.opencontainers.image.url"="https://github.com/OpenIntegrationEngine/engine" \ + "org.opencontainers.image.vendor"="The Open Integration Engine Project" \ + "org.opencontainers.image.version"="4.5.2-tp.1" + +COPY --from=downloader /opt/engine /opt/engine + +RUN apt-get update \ + && apt-get install -y unzip \ + && rm -rf /var/lib/apt/lists/* \ + && groupmod --new-name engine ubuntu \ + && usermod -l engine ubuntu \ + && usermod -aG engine engine + +VOLUME /opt/engine/appdata +VOLUME /opt/engine/custom-extensions + +WORKDIR /opt/engine +EXPOSE 8443 +USER engine + +ENTRYPOINT ["./entrypoint.sh"] +CMD ["./oieserver"] + +FROM eclipse-temurin:17.0.15_6-jre-alpine AS alpine-jre + +ARG CREATED_AT + +LABEL \ + "org.opencontainers.image.authors"="The Open Integration Engine Project and contributors" \ + "org.opencontainers.image.created"="${CREATED_AT?:}" \ + "org.opencontainers.image.description"="An open source fork of the now closed-source Mirth Connect" \ + "org.opencontainers.image.licenses"="MPL-2.0" \ + "org.opencontainers.image.source"="https://github.com/OpenIntegrationEngine/engine-docker" \ + "org.opencontainers.image.title"="Open Integration Engine" \ + "org.opencontainers.image.url"="https://github.com/OpenIntegrationEngine/engine" \ + "org.opencontainers.image.vendor"="The Open Integration Engine Project" \ + "org.opencontainers.image.version"="4.5.2-tp.1" + +COPY --from=downloader /opt/engine /opt/engine + +RUN apk add --no-cache bash unzip \ + && adduser -D -H -u 1000 engine engine + +VOLUME /opt/engine/appdata +VOLUME /opt/engine/custom-extensions + +WORKDIR /opt/engine +EXPOSE 8443 +USER engine + +ENTRYPOINT ["./entrypoint.sh"] +CMD ["./oieserver"] + +FROM eclipse-temurin:17.0.15_6-jdk-alpine AS alpine-jdk + +ARG CREATED_AT + +LABEL \ + "org.opencontainers.image.authors"="The Open Integration Engine Project and contributors" \ + "org.opencontainers.image.created"="${CREATED_AT?:}" \ + "org.opencontainers.image.description"="An open source fork of the now closed-source Mirth Connect" \ + "org.opencontainers.image.licenses"="MPL-2.0" \ + "org.opencontainers.image.source"="https://github.com/OpenIntegrationEngine/engine-docker" \ + "org.opencontainers.image.title"="Open Integration Engine" \ + "org.opencontainers.image.url"="https://github.com/OpenIntegrationEngine/engine" \ + "org.opencontainers.image.vendor"="The Open Integration Engine Project" \ + "org.opencontainers.image.version"="4.5.2-tp.1" + +COPY --from=downloader /opt/engine /opt/engine + +RUN apk add --no-cache bash unzip \ + && adduser -D -H -u 1000 engine engine + +VOLUME /opt/engine/appdata +VOLUME /opt/engine/custom-extensions + +WORKDIR /opt/engine +EXPOSE 8443 +USER engine + +ENTRYPOINT ["./entrypoint.sh"] +CMD ["./oieserver"] diff --git a/dockerfiles/4.5.2-tp.1/compose.yaml b/dockerfiles/4.5.2-tp.1/compose.yaml new file mode 100644 index 0000000..7e6f48b --- /dev/null +++ b/dockerfiles/4.5.2-tp.1/compose.yaml @@ -0,0 +1,68 @@ +################################################################ +# # +# WARNING: THIS FILE IS AUTO-GENERATED. DO NOT EDIT MANUALLY # +# # +################################################################ + +name: open-integration-engine + +services: + ubuntu-jre: + image: openintegrationengine/engine + build: + dockerfile: dockerfiles/4.5.2-tp.1/Dockerfile + target: ubuntu-jre + context: ../../ + platforms: + - linux/amd64 + # - linux/arm64 + tags: + - openintegrationengine/engine:4.5.2-tp.1-ubuntu + - openintegrationengine/engine:4.5.2-tp.1-ubuntu-jre + - openintegrationengine/engine:latest-ubuntu-jre + - openintegrationengine/engine:latest-ubuntu + + ubuntu-jdk: + image: openintegrationengine/engine + build: + dockerfile: dockerfiles/4.5.2-tp.1/Dockerfile + target: ubuntu-jdk + context: ../../ + platforms: + - linux/amd64 + # - linux/arm64 + tags: + - openintegrationengine/engine:4.5.2-tp.1-ubuntu + - openintegrationengine/engine:4.5.2-tp.1-ubuntu-jdk + - openintegrationengine/engine:latest-ubuntu-jdk + + alpine-jre: + image: openintegrationengine/engine + build: + dockerfile: dockerfiles/4.5.2-tp.1/Dockerfile + target: alpine-jre + context: ../../ + platforms: + - linux/amd64 + # - linux/arm64 + tags: + - openintegrationengine/engine:4.5.2-tp.1-alpine + - openintegrationengine/engine:4.5.2-tp.1-alpine-jre + - openintegrationengine/engine:latest-alpine-jre + - openintegrationengine/engine:latest-alpine + - openintegrationengine/engine:latest + + alpine-jdk: + image: openintegrationengine/engine + build: + dockerfile: dockerfiles/4.5.2-tp.1/Dockerfile + target: alpine-jdk + context: ../../ + platforms: + - linux/amd64 + # - linux/arm64 + tags: + - openintegrationengine/engine:4.5.2-tp.1-alpine + - openintegrationengine/engine:4.5.2-tp.1-alpine-jdk + - openintegrationengine/engine:latest-alpine-jdk + \ No newline at end of file From ea559aca01a1e58f23179c17d08392f1d7d22559 Mon Sep 17 00:00:00 2001 From: Kaur Palang Date: Thu, 3 Jul 2025 23:42:24 +0300 Subject: [PATCH 3/3] Move ownership change to COPY layer Signed-off-by: Kaur Palang --- dockerfiles/4.5.2-tp.1/Dockerfile | 10 ++++------ templates/Dockerfile.tpl | 4 +--- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/dockerfiles/4.5.2-tp.1/Dockerfile b/dockerfiles/4.5.2-tp.1/Dockerfile index c35cdd1..1e9a6b0 100644 --- a/dockerfiles/4.5.2-tp.1/Dockerfile +++ b/dockerfiles/4.5.2-tp.1/Dockerfile @@ -28,8 +28,6 @@ COPY --chmod=755 entrypoint.sh /opt/engine/entrypoint.sh RUN rm -rf cli-lib manager-lib \ && rm mirth-cli-launcher.jar oiecommand - -RUN chown -R 1000:1000 /opt/engine FROM eclipse-temurin:17.0.15_6-jre-noble AS ubuntu-jre ARG CREATED_AT @@ -45,7 +43,7 @@ LABEL \ "org.opencontainers.image.vendor"="The Open Integration Engine Project" \ "org.opencontainers.image.version"="4.5.2-tp.1" -COPY --from=downloader /opt/engine /opt/engine +COPY --from=downloader --chown=1000:1000 /opt/engine /opt/engine RUN apt-get update \ && apt-get install -y unzip \ @@ -79,7 +77,7 @@ LABEL \ "org.opencontainers.image.vendor"="The Open Integration Engine Project" \ "org.opencontainers.image.version"="4.5.2-tp.1" -COPY --from=downloader /opt/engine /opt/engine +COPY --from=downloader --chown=1000:1000 /opt/engine /opt/engine RUN apt-get update \ && apt-get install -y unzip \ @@ -113,7 +111,7 @@ LABEL \ "org.opencontainers.image.vendor"="The Open Integration Engine Project" \ "org.opencontainers.image.version"="4.5.2-tp.1" -COPY --from=downloader /opt/engine /opt/engine +COPY --from=downloader --chown=1000:1000 /opt/engine /opt/engine RUN apk add --no-cache bash unzip \ && adduser -D -H -u 1000 engine engine @@ -143,7 +141,7 @@ LABEL \ "org.opencontainers.image.vendor"="The Open Integration Engine Project" \ "org.opencontainers.image.version"="4.5.2-tp.1" -COPY --from=downloader /opt/engine /opt/engine +COPY --from=downloader --chown=1000:1000 /opt/engine /opt/engine RUN apk add --no-cache bash unzip \ && adduser -D -H -u 1000 engine engine diff --git a/templates/Dockerfile.tpl b/templates/Dockerfile.tpl index 8a111be..3a9878c 100644 --- a/templates/Dockerfile.tpl +++ b/templates/Dockerfile.tpl @@ -44,8 +44,6 @@ COPY --chmod=755 entrypoint.sh /opt/engine/entrypoint.sh RUN rm -rf cli-lib manager-lib \ && rm mirth-cli-launcher.jar oiecommand -RUN chown -R {{ $.config.uid }}:{{ $.config.gid }} /opt/engine - {{- /* Assign current version slug into a variable to carry it into the tags iteration */}} {{- $slug := dict "slug" .version.slug -}} {{/* Iterate version tags to generate the final stages */}} @@ -58,7 +56,7 @@ LABEL \ {{/* Render the Labels section to include the slug */}} {{- tpl $.config.labels $slug | strings.Indent 2 }} -COPY --from=downloader /opt/engine /opt/engine +COPY --from=downloader --chown={{ $.config.uid }}:{{ $.config.gid }} /opt/engine /opt/engine {{ if eq .distro "ubuntu" }} RUN apt-get update \ && apt-get install -y unzip \