Skip to content

lightstreamer: matrix refactor + -base variant - #21855

Merged
tianon merged 4 commits into
docker-library:masterfrom
Lightstreamer:lightstreamer-refactor
Jul 30, 2026
Merged

lightstreamer: matrix refactor + -base variant#21855
tianon merged 4 commits into
docker-library:masterfrom
Lightstreamer:lightstreamer-refactor

Conversation

@gfinocchiaro

Copy link
Copy Markdown
Contributor

Refactor of the entire matrix. Highlights:

  • All previously-published tag names remain valid — no docker pull will 404.
  • Every previously-published tag continues to use Eclipse Temurin as its JDK.
  • Directory layout changed to <mm>/<runtime>/temurin-<os>/, which lets us publish explicit-OS tag variants (-noble, -jammy) instead of relying on Temurin's floating default.
  • All pre-existing tags now resolve to temurin-noble (previously they used Temurin's unpinned base). Same JDK, forward-compatible OS pin.
  • New -base edition (base, <ver>-<runtime>-temurin-<os>-base, etc.) provides a minimal image with factory config stripped, intended for downstream to layer their own conf/adapters.
  • Retains the -temurin (no-OS) alias family for backwards compatibility.
  • Adds Gianluca Finocchiaro (@gfinocchiaro) to the Maintainers: list.

@gfinocchiaro
gfinocchiaro requested a review from a team as a code owner July 16, 2026 10:04
@gfinocchiaro
gfinocchiaro force-pushed the lightstreamer-refactor branch from 12d6d4c to 01c31be Compare July 16, 2026 10:32
@gfinocchiaro

gfinocchiaro commented Jul 16, 2026

Copy link
Copy Markdown
Contributor Author

The diff-pr bot's auto-comment failed with Body is too long (maximum is 65536 characters) because this PR is a matrix refactor that expands the tag set from 83 to 338. Quick summary for reviewers, complementing the PR description above:

  • 83 → 338 unique tags (net +255); 16 → 64 image blocks (+48).
  • Every one of the 83 currently-published tags is preserved. Verified by regenerating the manifest and comparing the tag list against the current DOI-published library/lightstreamer — no tags dropped.
  • All previously-published tags continue to use Eclipse Temurin; the only change to them is an explicit -noble OS pin on tags that previously used the unpinned Temurin base.
  • New content: fully-qualified -noble/-jammy tag variants, plus a new -base edition (base, <ver>-<runtime>-temurin-<os>-base) intended for downstream customization.
  • -temurin (no-OS) alias family retained for back-compat.
  • Third maintainer added (@gfinocchiaro) alongside the existing two.

Happy to split into smaller PRs if maintainers prefer (e.g. refactor first, then -base edition separately). Local bashbrew --library "$(pwd)" build lightstreamer passes green on the current tip.

@tianon

tianon commented Jul 16, 2026

Copy link
Copy Markdown
Member

Ooof, this has some major echos of docker-library/tomcat#299 which you might find interesting (I honestly don't have a good answer to the general problem -- the Java ecosystem is in a very dark place)

@gfinocchiaro
gfinocchiaro force-pushed the lightstreamer-refactor branch from 01c31be to 7c4b5d9 Compare July 17, 2026 10:57
@github-actions

This comment has been minimized.

@gfinocchiaro

Copy link
Copy Markdown
Contributor Author

Thanks for the pointer — genuinely useful context, and it confirms there isn't a clean general answer to the matrix-explosion problem.

Given that, I've taken the pragmatic route on this PR: dropped the OS variants entirely and let upstream Temurin pick its own per-JDK default OS. The -base edition addition — the actual user-visible motivation for the whole change — is retained, and every currently-published tag is preserved unchanged.

Happy to revisit the OS-variant discussion in a later PR if there's ever a general fix.

@yosifkit

Copy link
Copy Markdown
Member

I'm not sure I understand the need for a multistage build here. It seems like it is only using buildpack-deps:bookworm-curl as a place to download and verify the lightstreamer tar via curl and gpg. The eclipse-temurin images already include both curl and gnupg. What is the gain from using an extra stage?

@gfinocchiaro

Copy link
Copy Markdown
Contributor Author

Actually, the mentioned tools are not included in the latest images:

docker run eclipse-temurin:25-jdk curl
/__cacert_entrypoint.sh: line 114: exec: curl: not found
docker run eclipse-temurin:25-jdk gpg
/__cacert_entrypoint.sh: line 114: exec: gpg: not found

@gfinocchiaro

Copy link
Copy Markdown
Contributor Author

Please let us know if you would prefer us to switch back to a single-stage build.

@yosifkit

Copy link
Copy Markdown
Member

Please let us know if you would prefer us to switch back to a single-stage build.

Yeah, that would be appreciated; we try to avoid multi-stage builds in most cases. See also our FAQ entry: https://github.com/docker-library/faq/tree/7e5a82e9cb6e131b9a50d6532ab1b9cae95b0b30#multi-stage-builds

@github-actions

This comment has been minimized.

@gfinocchiaro

Copy link
Copy Markdown
Contributor Author

Please let us know if you would prefer us to switch back to a single-stage build.

Yeah, that would be appreciated; we try to avoid multi-stage builds in most cases. See also our FAQ entry: https://github.com/docker-library/faq/tree/7e5a82e9cb6e131b9a50d6532ab1b9cae95b0b30#multi-stage-builds

Perfect, just reverted.

@tianon

tianon commented Jul 29, 2026

Copy link
Copy Markdown
Member
+LABEL maintainer="Lightstreamer Server Development Team <support@lightstreamer.com>"

Every Dockerfile in the diff has this. We don't actively recommend LABEL in official images -- the build system already sets OCI annotations on the final published image (see #3540 (comment) for what that looks like; you might find you don't need any label at all). If you do want to keep it, the key name is the blocker: a bare maintainer key is the same problem as the deprecated MAINTAINER instruction. Either drop the LABEL entirely -- the Maintainers: field in the library file already captures this -- or rename the key to the proper OCI-namespaced form:

LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"

This applies to every Dockerfile in the diff, so ideally it's a one-line fix in the template.


+FROM eclipse-temurin:8-jdk

(same pattern for 11-jdk, 17-jdk, 21-jdk, 25-jdk throughout)

None of the FROM lines pin to a specific OS release -- eclipse-temurin:8-jdk currently resolves to 8-jdk-resolute (Ubuntu 25.10), but that alias will silently roll forward when the default changes. That's the square wheel: the base OS update happens under you rather than being a deliberate choice. Tags like eclipse-temurin:8-jdk-noble or eclipse-temurin:8-jdk-jammy let you control when you move between Ubuntu releases.

These FROM tags are unchanged from the previous Dockerfiles, so I wouldn't hold this PR over it -- worth cleaning up eventually, but not a new concern introduced here.


+RUN set -ex; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg \
+        && curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD} \

set -e is inert in a plain && chain like this -- && already ensures each command must succeed before the next runs, so there's nothing extra for set -e to do here. They can complement each other in more complex expressions, but not in a straight chain. The idiomatic form that actually puts set -e to work is ; as the separator:

RUN set -eux; \
        apt-get update; \
        apt-get install -y --no-install-recommends curl gnupg; \
        curl -fSL -o Lightstreamer.tar.gz "${LIGHTSTREAMER_URL_DOWNLOAD}"; \
        ...

The -u is worth adding too -- the ARG-declared variables are always in scope, but a typo in a variable name (say, ${LIGHTSTREAMER_URL_DWONLOAD}) would silently expand to empty and pass garbage to curl rather than failing immediately. Defense in depth.

@gfinocchiaro

Copy link
Copy Markdown
Contributor Author
+LABEL maintainer="Lightstreamer Server Development Team <support@lightstreamer.com>"

Every Dockerfile in the diff has this. We don't actively recommend LABEL in official images -- the build system already sets OCI annotations on the final published image (see #3540 (comment) for what that looks like; you might find you don't need any label at all). If you do want to keep it, the key name is the blocker: a bare maintainer key is the same problem as the deprecated MAINTAINER instruction. Either drop the LABEL entirely -- the Maintainers: field in the library file already captures this -- or rename the key to the proper OCI-namespaced form:

LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"

This applies to every Dockerfile in the diff, so ideally it's a one-line fix in the template.

Got it. I'm going to use the OCI-namedspace form.

+FROM eclipse-temurin:8-jdk

(same pattern for 11-jdk, 17-jdk, 21-jdk, 25-jdk throughout)

None of the FROM lines pin to a specific OS release -- eclipse-temurin:8-jdk currently resolves to 8-jdk-resolute (Ubuntu 25.10), but that alias will silently roll forward when the default changes. That's the square wheel: the base OS update happens under you rather than being a deliberate choice. Tags like eclipse-temurin:8-jdk-noble or eclipse-temurin:8-jdk-jammy let you control when you move between Ubuntu releases.

These FROM tags are unchanged from the previous Dockerfiles, so I wouldn't hold this PR over it -- worth cleaning up eventually, but not a new concern introduced here.

Ok, this will be done while relasing the next major version (8.0).

+RUN set -ex; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg \
+        && curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD} \

set -e is inert in a plain && chain like this -- && already ensures each command must succeed before the next runs, so there's nothing extra for set -e to do here. They can complement each other in more complex expressions, but not in a straight chain. The idiomatic form that actually puts set -e to work is ; as the separator:

RUN set -eux; \
        apt-get update; \
        apt-get install -y --no-install-recommends curl gnupg; \
        curl -fSL -o Lightstreamer.tar.gz "${LIGHTSTREAMER_URL_DOWNLOAD}"; \
        ...

The -u is worth adding too -- the ARG-declared variables are always in scope, but a typo in a variable name (say, ${LIGHTSTREAMER_URL_DWONLOAD}) would silently expand to empty and pass garbage to curl rather than failing immediately. Defense in depth.

Cool. I'm going to use this form. Thanks!

@github-actions

Copy link
Copy Markdown
Diff for cbf41a5:
diff --git a/_bashbrew-cat b/_bashbrew-cat
index ea7e612..c3df232 100644
--- a/_bashbrew-cat
+++ b/_bashbrew-cat
@@ -1,82 +1,162 @@
-Maintainers: Lightstreamer Server Development Team <support@lightstreamer.com> (@lightstreamer), Dario Crivelli <dario.crivelli@lightstreamer.com> (@dario-weswit)
+Maintainers: Lightstreamer Server Development Team <support@lightstreamer.com> (@lightstreamer), Dario Crivelli <dario.crivelli@lightstreamer.com> (@dario-weswit), Gianluca Finocchiaro <gianluca.finocchiaro@lightstreamer.com> (@gfinocchiaro)
 GitRepo: https://github.com/Lightstreamer/Docker.git
 
-Tags: 6.0.3, 6.0
+Tags: 6.0.3-jdk8, 6.0-jdk8, 6.0.3-jdk8-temurin, 6.0-jdk8-temurin, 6.0.3, 6.0
 Architectures: amd64, arm64v8
-GitCommit: b6c4a87af3e78b53887f311bdf2404f4f9956796
-Directory: 6.0
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 6.0/jdk8
 
-Tags: 6.1.0, 6.1, 6
+Tags: 6.0.3-jdk8-base, 6.0-jdk8-base, 6.0.3-jdk8-temurin-base, 6.0-jdk8-temurin-base, 6.0.3-base, 6.0-base
 Architectures: amd64, arm64v8
-GitCommit: b6c4a87af3e78b53887f311bdf2404f4f9956796
-Directory: 6.1
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 6.0/jdk8-base
 
-Tags: 7.0.3-jdk8-temurin, 7.0-jdk8-temurin, 7.0.3-jdk8, 7.0-jdk8
+Tags: 6.1.0-jdk8, 6.1-jdk8, 6.1.0-jdk8-temurin, 6.1-jdk8-temurin, 6-jdk8, 6-jdk8-temurin, 6.1.0, 6.1, 6
 Architectures: amd64, arm64v8
-GitCommit: b6c4a87af3e78b53887f311bdf2404f4f9956796
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 6.1/jdk8
+
+Tags: 6.1.0-jdk8-base, 6.1-jdk8-base, 6.1.0-jdk8-temurin-base, 6.1-jdk8-temurin-base, 6-jdk8-base, 6-jdk8-temurin-base, 6.1.0-base, 6.1-base, 6-base
+Architectures: amd64, arm64v8
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 6.1/jdk8-base
+
+Tags: 7.0.3-jdk8, 7.0-jdk8, 7.0.3-jdk8-temurin, 7.0-jdk8-temurin
+Architectures: amd64, arm64v8
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
 Directory: 7.0/jdk8
 
-Tags: 7.0.3-jdk11-temurin, 7.0-jdk11-temurin, 7.0.3-jdk11, 7.0-jdk11, 7.0.3, 7.0
+Tags: 7.0.3-jdk8-base, 7.0-jdk8-base, 7.0.3-jdk8-temurin-base, 7.0-jdk8-temurin-base
 Architectures: amd64, arm64v8
-GitCommit: b6c4a87af3e78b53887f311bdf2404f4f9956796
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 7.0/jdk8-base
+
+Tags: 7.0.3-jdk11, 7.0-jdk11, 7.0.3-jdk11-temurin, 7.0-jdk11-temurin, 7.0.3, 7.0
+Architectures: amd64, arm64v8
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
 Directory: 7.0/jdk11
 
-Tags: 7.1.3-jdk8-temurin, 7.1-jdk8-temurin, 7.1.3-jdk8, 7.1-jdk8
+Tags: 7.0.3-jdk11-base, 7.0-jdk11-base, 7.0.3-jdk11-temurin-base, 7.0-jdk11-temurin-base, 7.0.3-base, 7.0-base
+Architectures: amd64, arm64v8
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 7.0/jdk11-base
+
+Tags: 7.1.3-jdk8, 7.1-jdk8, 7.1.3-jdk8-temurin, 7.1-jdk8-temurin
 Architectures: amd64, arm64v8
-GitCommit: b6c4a87af3e78b53887f311bdf2404f4f9956796
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
 Directory: 7.1/jdk8
 
-Tags: 7.1.3-jdk11-temurin, 7.1-jdk11-temurin, 7.1.3-jdk11, 7.1-jdk11, 7.1.3, 7.1
+Tags: 7.1.3-jdk8-base, 7.1-jdk8-base, 7.1.3-jdk8-temurin-base, 7.1-jdk8-temurin-base
 Architectures: amd64, arm64v8
-GitCommit: b6c4a87af3e78b53887f311bdf2404f4f9956796
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 7.1/jdk8-base
+
+Tags: 7.1.3-jdk11, 7.1-jdk11, 7.1.3-jdk11-temurin, 7.1-jdk11-temurin, 7.1.3, 7.1
+Architectures: amd64, arm64v8
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
 Directory: 7.1/jdk11
 
-Tags: 7.2.2-jdk8-temurin, 7.2-jdk8-temurin, 7.2.2-jdk8, 7.2-jdk8
+Tags: 7.1.3-jdk11-base, 7.1-jdk11-base, 7.1.3-jdk11-temurin-base, 7.1-jdk11-temurin-base, 7.1.3-base, 7.1-base
+Architectures: amd64, arm64v8
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 7.1/jdk11-base
+
+Tags: 7.2.2-jdk8, 7.2-jdk8, 7.2.2-jdk8-temurin, 7.2-jdk8-temurin
 Architectures: amd64, arm64v8
-GitCommit: b6c4a87af3e78b53887f311bdf2404f4f9956796
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
 Directory: 7.2/jdk8
 
-Tags: 7.2.2-jdk11-temurin, 7.2-jdk11-temurin, 7.2.2-jdk11, 7.2-jdk11, 7.2.2, 7.2
+Tags: 7.2.2-jdk8-base, 7.2-jdk8-base, 7.2.2-jdk8-temurin-base, 7.2-jdk8-temurin-base
 Architectures: amd64, arm64v8
-GitCommit: b6c4a87af3e78b53887f311bdf2404f4f9956796
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 7.2/jdk8-base
+
+Tags: 7.2.2-jdk11, 7.2-jdk11, 7.2.2-jdk11-temurin, 7.2-jdk11-temurin, 7.2.2, 7.2
+Architectures: amd64, arm64v8
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
 Directory: 7.2/jdk11
 
-Tags: 7.3.3-jdk8-temurin, 7.3-jdk8-temurin, 7.3.3-jdk8, 7.3-jdk8
+Tags: 7.2.2-jdk11-base, 7.2-jdk11-base, 7.2.2-jdk11-temurin-base, 7.2-jdk11-temurin-base, 7.2.2-base, 7.2-base
+Architectures: amd64, arm64v8
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 7.2/jdk11-base
+
+Tags: 7.3.3-jdk8, 7.3-jdk8, 7.3.3-jdk8-temurin, 7.3-jdk8-temurin
 Architectures: amd64, arm64v8
-GitCommit: b6c4a87af3e78b53887f311bdf2404f4f9956796
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
 Directory: 7.3/jdk8
 
-Tags: 7.3.3-jdk11-temurin, 7.3-jdk11-temurin, 7.3.3-jdk11, 7.3-jdk11
+Tags: 7.3.3-jdk8-base, 7.3-jdk8-base, 7.3.3-jdk8-temurin-base, 7.3-jdk8-temurin-base
 Architectures: amd64, arm64v8
-GitCommit: b6c4a87af3e78b53887f311bdf2404f4f9956796
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 7.3/jdk8-base
+
+Tags: 7.3.3-jdk11, 7.3-jdk11, 7.3.3-jdk11-temurin, 7.3-jdk11-temurin
+Architectures: amd64, arm64v8
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
 Directory: 7.3/jdk11
 
-Tags: 7.3.3-jdk17-temurin, 7.3-jdk17-temurin, 7.3.3-jdk17, 7.3-jdk17, 7.3.3, 7.3
+Tags: 7.3.3-jdk11-base, 7.3-jdk11-base, 7.3.3-jdk11-temurin-base, 7.3-jdk11-temurin-base
+Architectures: amd64, arm64v8
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 7.3/jdk11-base
+
+Tags: 7.3.3-jdk17, 7.3-jdk17, 7.3.3-jdk17-temurin, 7.3-jdk17-temurin, 7.3.3, 7.3
 Architectures: amd64, arm64v8
-GitCommit: b6c4a87af3e78b53887f311bdf2404f4f9956796
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
 Directory: 7.3/jdk17
 
-Tags: 7.4.8-jdk8-temurin, 7.4-jdk8-temurin, 7-jdk8-temurin, 7.4.8-jdk8, 7.4-jdk8, 7-jdk8
+Tags: 7.3.3-jdk17-base, 7.3-jdk17-base, 7.3.3-jdk17-temurin-base, 7.3-jdk17-temurin-base, 7.3.3-base, 7.3-base
 Architectures: amd64, arm64v8
-GitCommit: e9f661a11fd775edfe188bb2e4f9ada8e8dad2cb
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 7.3/jdk17-base
+
+Tags: 7.4.8-jdk8, 7.4-jdk8, 7.4.8-jdk8-temurin, 7.4-jdk8-temurin, 7-jdk8, 7-jdk8-temurin
+Architectures: amd64, arm64v8
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
 Directory: 7.4/jdk8
 
-Tags: 7.4.8-jdk11-temurin, 7.4-jdk11-temurin, 7-jdk11-temurin, 7.4.8-jdk11, 7.4-jdk11, 7-jdk11
+Tags: 7.4.8-jdk8-base, 7.4-jdk8-base, 7.4.8-jdk8-temurin-base, 7.4-jdk8-temurin-base, 7-jdk8-base, 7-jdk8-temurin-base
+Architectures: amd64, arm64v8
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 7.4/jdk8-base
+
+Tags: 7.4.8-jdk11, 7.4-jdk11, 7.4.8-jdk11-temurin, 7.4-jdk11-temurin, 7-jdk11, 7-jdk11-temurin
 Architectures: amd64, arm64v8
-GitCommit: e9f661a11fd775edfe188bb2e4f9ada8e8dad2cb
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
 Directory: 7.4/jdk11
 
-Tags: 7.4.8-jdk17-temurin, 7.4-jdk17-temurin, 7-jdk17-temurin, 7.4.8-jdk17, 7.4-jdk17, 7-jdk17
+Tags: 7.4.8-jdk11-base, 7.4-jdk11-base, 7.4.8-jdk11-temurin-base, 7.4-jdk11-temurin-base, 7-jdk11-base, 7-jdk11-temurin-base
 Architectures: amd64, arm64v8
-GitCommit: e9f661a11fd775edfe188bb2e4f9ada8e8dad2cb
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 7.4/jdk11-base
+
+Tags: 7.4.8-jdk17, 7.4-jdk17, 7.4.8-jdk17-temurin, 7.4-jdk17-temurin, 7-jdk17, 7-jdk17-temurin
+Architectures: amd64, arm64v8
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
 Directory: 7.4/jdk17
 
-Tags: 7.4.8-jdk21-temurin, 7.4-jdk21-temurin, 7-jdk21-temurin, 7.4.8-jdk21, 7.4-jdk21, 7-jdk21
+Tags: 7.4.8-jdk17-base, 7.4-jdk17-base, 7.4.8-jdk17-temurin-base, 7.4-jdk17-temurin-base, 7-jdk17-base, 7-jdk17-temurin-base
+Architectures: amd64, arm64v8
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 7.4/jdk17-base
+
+Tags: 7.4.8-jdk21, 7.4-jdk21, 7.4.8-jdk21-temurin, 7.4-jdk21-temurin, 7-jdk21, 7-jdk21-temurin
 Architectures: amd64, arm64v8
-GitCommit: e9f661a11fd775edfe188bb2e4f9ada8e8dad2cb
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
 Directory: 7.4/jdk21
 
-Tags: 7.4.8-jdk25-temurin, 7.4-jdk25-temurin, 7-jdk25-temurin, 7.4.8-jdk25, 7.4-jdk25, 7-jdk25, 7.4.8, 7.4, 7, latest
+Tags: 7.4.8-jdk21-base, 7.4-jdk21-base, 7.4.8-jdk21-temurin-base, 7.4-jdk21-temurin-base, 7-jdk21-base, 7-jdk21-temurin-base
 Architectures: amd64, arm64v8
-GitCommit: e9f661a11fd775edfe188bb2e4f9ada8e8dad2cb
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 7.4/jdk21-base
+
+Tags: 7.4.8-jdk25, 7.4-jdk25, 7.4.8-jdk25-temurin, 7.4-jdk25-temurin, 7-jdk25, 7-jdk25-temurin, 7.4.8, 7.4, 7, latest
+Architectures: amd64, arm64v8
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
 Directory: 7.4/jdk25
+
+Tags: 7.4.8-jdk25-base, 7.4-jdk25-base, 7.4.8-jdk25-temurin-base, 7.4-jdk25-temurin-base, 7-jdk25-base, 7-jdk25-temurin-base, 7.4.8-base, 7.4-base, 7-base, base
+Architectures: amd64, arm64v8
+GitCommit: 52bdda2121071588ab5cb36be7bc5a01eaf89e6e
+Directory: 7.4/jdk25-base
diff --git a/_bashbrew-list b/_bashbrew-list
index 82c359f..23b9746 100644
--- a/_bashbrew-list
+++ b/_bashbrew-list
@@ -1,83 +1,186 @@
 lightstreamer:6
+lightstreamer:6-base
+lightstreamer:6-jdk8
+lightstreamer:6-jdk8-base
+lightstreamer:6-jdk8-temurin
+lightstreamer:6-jdk8-temurin-base
 lightstreamer:6.0
+lightstreamer:6.0-base
+lightstreamer:6.0-jdk8
+lightstreamer:6.0-jdk8-base
+lightstreamer:6.0-jdk8-temurin
+lightstreamer:6.0-jdk8-temurin-base
 lightstreamer:6.0.3
+lightstreamer:6.0.3-base
+lightstreamer:6.0.3-jdk8
+lightstreamer:6.0.3-jdk8-base
+lightstreamer:6.0.3-jdk8-temurin
+lightstreamer:6.0.3-jdk8-temurin-base
 lightstreamer:6.1
+lightstreamer:6.1-base
+lightstreamer:6.1-jdk8
+lightstreamer:6.1-jdk8-base
+lightstreamer:6.1-jdk8-temurin
+lightstreamer:6.1-jdk8-temurin-base
 lightstreamer:6.1.0
+lightstreamer:6.1.0-base
+lightstreamer:6.1.0-jdk8
+lightstreamer:6.1.0-jdk8-base
+lightstreamer:6.1.0-jdk8-temurin
+lightstreamer:6.1.0-jdk8-temurin-base
 lightstreamer:7
+lightstreamer:7-base
 lightstreamer:7-jdk8
+lightstreamer:7-jdk8-base
 lightstreamer:7-jdk8-temurin
+lightstreamer:7-jdk8-temurin-base
 lightstreamer:7-jdk11
+lightstreamer:7-jdk11-base
 lightstreamer:7-jdk11-temurin
+lightstreamer:7-jdk11-temurin-base
 lightstreamer:7-jdk17
+lightstreamer:7-jdk17-base
 lightstreamer:7-jdk17-temurin
+lightstreamer:7-jdk17-temurin-base
 lightstreamer:7-jdk21
+lightstreamer:7-jdk21-base
 lightstreamer:7-jdk21-temurin
+lightstreamer:7-jdk21-temurin-base
 lightstreamer:7-jdk25
+lightstreamer:7-jdk25-base
 lightstreamer:7-jdk25-temurin
+lightstreamer:7-jdk25-temurin-base
 lightstreamer:7.0
+lightstreamer:7.0-base
 lightstreamer:7.0-jdk8
+lightstreamer:7.0-jdk8-base
 lightstreamer:7.0-jdk8-temurin
+lightstreamer:7.0-jdk8-temurin-base
 lightstreamer:7.0-jdk11
+lightstreamer:7.0-jdk11-base
 lightstreamer:7.0-jdk11-temurin
+lightstreamer:7.0-jdk11-temurin-base
 lightstreamer:7.0.3
+lightstreamer:7.0.3-base
 lightstreamer:7.0.3-jdk8
+lightstreamer:7.0.3-jdk8-base
 lightstreamer:7.0.3-jdk8-temurin
+lightstreamer:7.0.3-jdk8-temurin-base
 lightstreamer:7.0.3-jdk11
+lightstreamer:7.0.3-jdk11-base
 lightstreamer:7.0.3-jdk11-temurin
+lightstreamer:7.0.3-jdk11-temurin-base
 lightstreamer:7.1
+lightstreamer:7.1-base
 lightstreamer:7.1-jdk8
+lightstreamer:7.1-jdk8-base
 lightstreamer:7.1-jdk8-temurin
+lightstreamer:7.1-jdk8-temurin-base
 lightstreamer:7.1-jdk11
+lightstreamer:7.1-jdk11-base
 lightstreamer:7.1-jdk11-temurin
+lightstreamer:7.1-jdk11-temurin-base
 lightstreamer:7.1.3
+lightstreamer:7.1.3-base
 lightstreamer:7.1.3-jdk8
+lightstreamer:7.1.3-jdk8-base
 lightstreamer:7.1.3-jdk8-temurin
+lightstreamer:7.1.3-jdk8-temurin-base
 lightstreamer:7.1.3-jdk11
+lightstreamer:7.1.3-jdk11-base
 lightstreamer:7.1.3-jdk11-temurin
+lightstreamer:7.1.3-jdk11-temurin-base
 lightstreamer:7.2
+lightstreamer:7.2-base
 lightstreamer:7.2-jdk8
+lightstreamer:7.2-jdk8-base
 lightstreamer:7.2-jdk8-temurin
+lightstreamer:7.2-jdk8-temurin-base
 lightstreamer:7.2-jdk11
+lightstreamer:7.2-jdk11-base
 lightstreamer:7.2-jdk11-temurin
+lightstreamer:7.2-jdk11-temurin-base
 lightstreamer:7.2.2
+lightstreamer:7.2.2-base
 lightstreamer:7.2.2-jdk8
+lightstreamer:7.2.2-jdk8-base
 lightstreamer:7.2.2-jdk8-temurin
+lightstreamer:7.2.2-jdk8-temurin-base
 lightstreamer:7.2.2-jdk11
+lightstreamer:7.2.2-jdk11-base
 lightstreamer:7.2.2-jdk11-temurin
+lightstreamer:7.2.2-jdk11-temurin-base
 lightstreamer:7.3
+lightstreamer:7.3-base
 lightstreamer:7.3-jdk8
+lightstreamer:7.3-jdk8-base
 lightstreamer:7.3-jdk8-temurin
+lightstreamer:7.3-jdk8-temurin-base
 lightstreamer:7.3-jdk11
+lightstreamer:7.3-jdk11-base
 lightstreamer:7.3-jdk11-temurin
+lightstreamer:7.3-jdk11-temurin-base
 lightstreamer:7.3-jdk17
+lightstreamer:7.3-jdk17-base
 lightstreamer:7.3-jdk17-temurin
+lightstreamer:7.3-jdk17-temurin-base
 lightstreamer:7.3.3
+lightstreamer:7.3.3-base
 lightstreamer:7.3.3-jdk8
+lightstreamer:7.3.3-jdk8-base
 lightstreamer:7.3.3-jdk8-temurin
+lightstreamer:7.3.3-jdk8-temurin-base
 lightstreamer:7.3.3-jdk11
+lightstreamer:7.3.3-jdk11-base
 lightstreamer:7.3.3-jdk11-temurin
+lightstreamer:7.3.3-jdk11-temurin-base
 lightstreamer:7.3.3-jdk17
+lightstreamer:7.3.3-jdk17-base
 lightstreamer:7.3.3-jdk17-temurin
+lightstreamer:7.3.3-jdk17-temurin-base
 lightstreamer:7.4
+lightstreamer:7.4-base
 lightstreamer:7.4-jdk8
+lightstreamer:7.4-jdk8-base
 lightstreamer:7.4-jdk8-temurin
+lightstreamer:7.4-jdk8-temurin-base
 lightstreamer:7.4-jdk11
+lightstreamer:7.4-jdk11-base
 lightstreamer:7.4-jdk11-temurin
+lightstreamer:7.4-jdk11-temurin-base
 lightstreamer:7.4-jdk17
+lightstreamer:7.4-jdk17-base
 lightstreamer:7.4-jdk17-temurin
+lightstreamer:7.4-jdk17-temurin-base
 lightstreamer:7.4-jdk21
+lightstreamer:7.4-jdk21-base
 lightstreamer:7.4-jdk21-temurin
+lightstreamer:7.4-jdk21-temurin-base
 lightstreamer:7.4-jdk25
+lightstreamer:7.4-jdk25-base
 lightstreamer:7.4-jdk25-temurin
+lightstreamer:7.4-jdk25-temurin-base
 lightstreamer:7.4.8
+lightstreamer:7.4.8-base
 lightstreamer:7.4.8-jdk8
+lightstreamer:7.4.8-jdk8-base
 lightstreamer:7.4.8-jdk8-temurin
+lightstreamer:7.4.8-jdk8-temurin-base
 lightstreamer:7.4.8-jdk11
+lightstreamer:7.4.8-jdk11-base
 lightstreamer:7.4.8-jdk11-temurin
+lightstreamer:7.4.8-jdk11-temurin-base
 lightstreamer:7.4.8-jdk17
+lightstreamer:7.4.8-jdk17-base
 lightstreamer:7.4.8-jdk17-temurin
+lightstreamer:7.4.8-jdk17-temurin-base
 lightstreamer:7.4.8-jdk21
+lightstreamer:7.4.8-jdk21-base
 lightstreamer:7.4.8-jdk21-temurin
+lightstreamer:7.4.8-jdk21-temurin-base
 lightstreamer:7.4.8-jdk25
+lightstreamer:7.4.8-jdk25-base
 lightstreamer:7.4.8-jdk25-temurin
+lightstreamer:7.4.8-jdk25-temurin-base
+lightstreamer:base
 lightstreamer:latest
diff --git a/_bashbrew-list-build-order b/_bashbrew-list-build-order
index 8e2fbc8..2118778 100644
--- a/_bashbrew-list-build-order
+++ b/_bashbrew-list-build-order
@@ -1,16 +1,32 @@
 lightstreamer:6
+lightstreamer:6-base
 lightstreamer:6.0
-lightstreamer:7-jdk8
-lightstreamer:7-jdk11
-lightstreamer:7-jdk17
-lightstreamer:7-jdk21
+lightstreamer:6.0-base
+lightstreamer:7-jdk8-temurin
+lightstreamer:7-jdk8-temurin-base
+lightstreamer:7-jdk11-temurin
+lightstreamer:7-jdk11-temurin-base
+lightstreamer:7-jdk17-temurin
+lightstreamer:7-jdk17-temurin-base
+lightstreamer:7-jdk21-temurin
+lightstreamer:7-jdk21-temurin-base
 lightstreamer:7.0
-lightstreamer:7.0-jdk8
+lightstreamer:7.0-base
+lightstreamer:7.0-jdk8-temurin
+lightstreamer:7.0-jdk8-temurin-base
 lightstreamer:7.1
-lightstreamer:7.1-jdk8
+lightstreamer:7.1-base
+lightstreamer:7.1-jdk8-temurin
+lightstreamer:7.1-jdk8-temurin-base
 lightstreamer:7.2
-lightstreamer:7.2-jdk8
+lightstreamer:7.2-base
+lightstreamer:7.2-jdk8-temurin
+lightstreamer:7.2-jdk8-temurin-base
 lightstreamer:7.3
-lightstreamer:7.3-jdk8
-lightstreamer:7.3-jdk11
+lightstreamer:7.3-base
+lightstreamer:7.3-jdk8-temurin
+lightstreamer:7.3-jdk8-temurin-base
+lightstreamer:7.3-jdk11-temurin
+lightstreamer:7.3-jdk11-temurin-base
+lightstreamer:base
 lightstreamer:latest
diff --git a/lightstreamer_6-base/Dockerfile b/lightstreamer_6-base/Dockerfile
new file mode 100644
index 0000000..168c372
--- /dev/null
+++ b/lightstreamer_6-base/Dockerfile
@@ -0,0 +1,63 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+# "Base" edition — same runtime as the full image, but with all content that
+# downstream images are expected to provide themselves removed: factory config
+# XMLs, welcome page, welcome-adapter resources, and PDF documentation.
+# The sed step that rewrites conf/lightstreamer_log_conf.xml is dropped too,
+# since the file it targets is stripped a moment later.
+
+FROM eclipse-temurin:8-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=6.1.0
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/6.1.0/Lightstreamer-6.1.0.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Replace the fictitious jdk path with the JAVA_HOME environment variable in the launch script file
+        sed -i -- 's/\/usr\/jdk1.8.0/$JAVA_HOME/' bin/unix-like/LS.sh; \
+# Strip content that downstream images are expected to provide themselves.
+        rm -rf DOCS-SDKs pages adapters/welcome_res; \
+        rm -f conf/*.xml; \
+        rm -rf bin/unix-like/install; \
+        rm -rf bin/windows; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Downstream images that add content (conf/,
+# adapters/) should apply the same pattern to their own additions.
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+# Downstream images MUST provide their own conf/*.xml (and any adapters they
+# need) before the container can start.
+CMD ["./LS.sh", "run"]
diff --git a/lightstreamer_6.0-base/Dockerfile b/lightstreamer_6.0-base/Dockerfile
new file mode 100644
index 0000000..0d9734a
--- /dev/null
+++ b/lightstreamer_6.0-base/Dockerfile
@@ -0,0 +1,63 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+# "Base" edition — same runtime as the full image, but with all content that
+# downstream images are expected to provide themselves removed: factory config
+# XMLs, welcome page, welcome-adapter resources, and PDF documentation.
+# The sed step that rewrites conf/lightstreamer_log_conf.xml is dropped too,
+# since the file it targets is stripped a moment later.
+
+FROM eclipse-temurin:8-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=6.0.3
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/6.0.3/Lightstreamer-6.0.3.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Replace the fictitious jdk path with the JAVA_HOME environment variable in the launch script file
+        sed -i -- 's/\/usr\/jdk1.8.0/$JAVA_HOME/' bin/unix-like/LS.sh; \
+# Strip content that downstream images are expected to provide themselves.
+        rm -rf DOCS-SDKs pages adapters/welcome_res; \
+        rm -f conf/*.xml; \
+        rm -rf bin/unix-like/install; \
+        rm -rf bin/windows; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Downstream images that add content (conf/,
+# adapters/) should apply the same pattern to their own additions.
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+# Downstream images MUST provide their own conf/*.xml (and any adapters they
+# need) before the container can start.
+CMD ["./LS.sh", "run"]
diff --git a/lightstreamer_6.0/Dockerfile b/lightstreamer_6.0/Dockerfile
index 91cd352..f11f174 100644
--- a/lightstreamer_6.0/Dockerfile
+++ b/lightstreamer_6.0/Dockerfile
@@ -1,40 +1,57 @@
-# Set the base image
-FROM eclipse-temurin:8-jdk
-
-LABEL maintainer="Lightstreamer Server Development Team <support@lightstreamer.com>"
-
-# Add gpg, which is missing in the eclipse-temurin image
-RUN apt-get -y update \
-        && apt-get -y install gnupg \
-        && rm -rf /var/lib/apt/lists/*
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
 
-# Import Lighstreamer's public key
-RUN gpg --batch --keyserver hkp://keyserver.ubuntu.com --recv-keys 9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+FROM eclipse-temurin:8-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=6.0.3
 
-# Set environment variables to identify the right Lightstreamer version and edition
-ENV LIGHTSTREAMER_URL_DOWNLOAD https://lightstreamer.com/distros/ls-server/6.0.3/Lightstreamer_Allegro-Presto-Vivace_6_0_3_20160905.tar.gz
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/6.0.3/Lightstreamer-6.0.3.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
 
-# Set the temporary working dir
 WORKDIR /lightstreamer
 
-# Download the package from the Lightstreamer site and replace the fictitious jdk path with 
-# the JAVA_HOME environment variable in the launch script file.
-# Finally, adjust logging configuration to log only on standard output.
-RUN set -x \
-        && curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD} \
-        && curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc \
-        && gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz \
-        && tar -xvf Lightstreamer.tar.gz --strip-components=1 \
-        && rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc \
-        && sed -i -- 's/\/usr\/jdk1.8.0/$JAVA_HOME/' bin/unix-like/LS.sh \
-        && sed -i -e '123,$s/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
-                  -e '/<appender-ref ref="LSDailyRolling" \/>/ d' conf/lightstreamer_log_conf.xml
-
-# Export TCP port 8080
+RUN set -eux; \
+        apt-get update; \
+        apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Replace the fictitious jdk path with the JAVA_HOME environment variable in the launch script file
+        sed -i -- 's/\/usr\/jdk1.8.0/$JAVA_HOME/' bin/unix-like/LS.sh; \
+# Adjust the logging configuration in order to log only on standard output
+        sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
+               -e '/<logger name="LightstreamerLogger.init/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerLogger.license/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerProxyAdapters/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               conf/lightstreamer_log_conf.xml; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Harmless on plain Docker (user 10000 still owns
+# the files and gets the same permissions via the user bits).
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer;
+
+USER 10000:10000
+
 EXPOSE 8080
 
-# Set the final working dir
 WORKDIR /lightstreamer/bin/unix-like
 
-# Start the server
 CMD ["./LS.sh", "run"]
\ No newline at end of file
diff --git a/lightstreamer_6/Dockerfile b/lightstreamer_6/Dockerfile
index 34f6814..f7f77cd 100644
--- a/lightstreamer_6/Dockerfile
+++ b/lightstreamer_6/Dockerfile
@@ -1,40 +1,57 @@
-# Set the base image
-FROM eclipse-temurin:8-jdk
-
-LABEL maintainer="Lightstreamer Server Development Team <support@lightstreamer.com>"
-
-# Add gpg, which is missing in the eclipse-temurin image
-RUN apt-get -y update \
-        && apt-get -y install gnupg \
-        && rm -rf /var/lib/apt/lists/*
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
 
-# Import Lighstreamer's public key
-RUN gpg --batch --keyserver hkp://keyserver.ubuntu.com --recv-keys 9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+FROM eclipse-temurin:8-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=6.1.0
 
-# Set environment variables to identify the right Lightstreamer version and edition
-ENV LIGHTSTREAMER_URL_DOWNLOAD https://lightstreamer.com/distros/ls-server/6.1.0/Lightstreamer_Allegro-Presto-Vivace_6_1_0_20170123.tar.gz
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/6.1.0/Lightstreamer-6.1.0.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
 
-# Set the temporary working dir
 WORKDIR /lightstreamer
 
-# Download the package from the Lightstreamer site and replace the fictitious jdk path with 
-# the JAVA_HOME environment variable in the launch script file.
-# Finally, adjust logging configuration to log only on standard output.
-RUN set -x \
-        && curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD} \
-        && curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc \
-        && gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz \
-        && tar -xvf Lightstreamer.tar.gz --strip-components=1 \
-        && rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc \
-        && sed -i -- 's/\/usr\/jdk1.8.0/$JAVA_HOME/' bin/unix-like/LS.sh \
-        && sed -i -e '123,$s/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
-                  -e '/<appender-ref ref="LSDailyRolling" \/>/ d' conf/lightstreamer_log_conf.xml
-
-# Export TCP port 8080
+RUN set -eux; \
+        apt-get update; \
+        apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Replace the fictitious jdk path with the JAVA_HOME environment variable in the launch script file
+        sed -i -- 's/\/usr\/jdk1.8.0/$JAVA_HOME/' bin/unix-like/LS.sh; \
+# Adjust the logging configuration in order to log only on standard output
+        sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
+               -e '/<logger name="LightstreamerLogger.init/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerLogger.license/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerProxyAdapters/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               conf/lightstreamer_log_conf.xml; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Harmless on plain Docker (user 10000 still owns
+# the files and gets the same permissions via the user bits).
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer;
+
+USER 10000:10000
+
 EXPOSE 8080
 
-# Set the final working dir
 WORKDIR /lightstreamer/bin/unix-like
 
-# Start the server
 CMD ["./LS.sh", "run"]
\ No newline at end of file
diff --git a/lightstreamer_7-jdk11-temurin-base/Dockerfile b/lightstreamer_7-jdk11-temurin-base/Dockerfile
new file mode 100644
index 0000000..0819f45
--- /dev/null
+++ b/lightstreamer_7-jdk11-temurin-base/Dockerfile
@@ -0,0 +1,61 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+# "Base" edition — same runtime as the full image, but with all content that
+# downstream images are expected to provide themselves removed: factory config
+# XMLs, welcome page, welcome-adapter resources, and PDF documentation.
+# The sed step that rewrites conf/lightstreamer_log_conf.xml is dropped too,
+# since the file it targets is stripped a moment later.
+
+FROM eclipse-temurin:11-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.4.8
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.4.8/Lightstreamer-7.4.8.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Strip content that downstream images are expected to provide themselves.
+        rm -rf docs pages adapters/welcome_res; \
+        rm -f conf/*.xml; \
+        rm -rf bin/unix-like/install; \
+        rm -rf bin/windows; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Downstream images that add content (conf/,
+# adapters/) should apply the same pattern to their own additions.
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+# Downstream images MUST provide their own conf/*.xml (and any adapters they
+# need) before the container can start.
+CMD ["./LS.sh", "run"]
diff --git a/lightstreamer_7-jdk11-temurin/Dockerfile b/lightstreamer_7-jdk11-temurin/Dockerfile
new file mode 100644
index 0000000..fe2078f
--- /dev/null
+++ b/lightstreamer_7-jdk11-temurin/Dockerfile
@@ -0,0 +1,55 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+FROM eclipse-temurin:11-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.4.8
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.4.8/Lightstreamer-7.4.8.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update; \
+        apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Adjust the logging configuration in order to log only on standard output
+        sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
+               -e '/<logger name="LightstreamerLogger.init/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerLogger.license/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerProxyAdapters/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               conf/lightstreamer_log_conf.xml; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Harmless on plain Docker (user 10000 still owns
+# the files and gets the same permissions via the user bits).
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer;
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+CMD ["./LS.sh", "run"]
\ No newline at end of file
diff --git a/lightstreamer_7-jdk11/Dockerfile b/lightstreamer_7-jdk11/Dockerfile
deleted file mode 100644
index 22fd120..0000000
diff --git a/lightstreamer_7-jdk17-temurin-base/Dockerfile b/lightstreamer_7-jdk17-temurin-base/Dockerfile
new file mode 100644
index 0000000..3a51676
--- /dev/null
+++ b/lightstreamer_7-jdk17-temurin-base/Dockerfile
@@ -0,0 +1,61 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+# "Base" edition — same runtime as the full image, but with all content that
+# downstream images are expected to provide themselves removed: factory config
+# XMLs, welcome page, welcome-adapter resources, and PDF documentation.
+# The sed step that rewrites conf/lightstreamer_log_conf.xml is dropped too,
+# since the file it targets is stripped a moment later.
+
+FROM eclipse-temurin:17-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.4.8
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.4.8/Lightstreamer-7.4.8.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Strip content that downstream images are expected to provide themselves.
+        rm -rf docs pages adapters/welcome_res; \
+        rm -f conf/*.xml; \
+        rm -rf bin/unix-like/install; \
+        rm -rf bin/windows; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Downstream images that add content (conf/,
+# adapters/) should apply the same pattern to their own additions.
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+# Downstream images MUST provide their own conf/*.xml (and any adapters they
+# need) before the container can start.
+CMD ["./LS.sh", "run"]
diff --git a/lightstreamer_7-jdk17-temurin/Dockerfile b/lightstreamer_7-jdk17-temurin/Dockerfile
new file mode 100644
index 0000000..629593d
--- /dev/null
+++ b/lightstreamer_7-jdk17-temurin/Dockerfile
@@ -0,0 +1,55 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+FROM eclipse-temurin:17-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.4.8
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.4.8/Lightstreamer-7.4.8.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update; \
+        apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Adjust the logging configuration in order to log only on standard output
+        sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
+               -e '/<logger name="LightstreamerLogger.init/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerLogger.license/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerProxyAdapters/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               conf/lightstreamer_log_conf.xml; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Harmless on plain Docker (user 10000 still owns
+# the files and gets the same permissions via the user bits).
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer;
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+CMD ["./LS.sh", "run"]
\ No newline at end of file
diff --git a/lightstreamer_7-jdk17/Dockerfile b/lightstreamer_7-jdk17/Dockerfile
deleted file mode 100644
index 58737ea..0000000
diff --git a/lightstreamer_7-jdk21-temurin-base/Dockerfile b/lightstreamer_7-jdk21-temurin-base/Dockerfile
new file mode 100644
index 0000000..672b681
--- /dev/null
+++ b/lightstreamer_7-jdk21-temurin-base/Dockerfile
@@ -0,0 +1,61 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+# "Base" edition — same runtime as the full image, but with all content that
+# downstream images are expected to provide themselves removed: factory config
+# XMLs, welcome page, welcome-adapter resources, and PDF documentation.
+# The sed step that rewrites conf/lightstreamer_log_conf.xml is dropped too,
+# since the file it targets is stripped a moment later.
+
+FROM eclipse-temurin:21-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.4.8
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.4.8/Lightstreamer-7.4.8.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Strip content that downstream images are expected to provide themselves.
+        rm -rf docs pages adapters/welcome_res; \
+        rm -f conf/*.xml; \
+        rm -rf bin/unix-like/install; \
+        rm -rf bin/windows; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Downstream images that add content (conf/,
+# adapters/) should apply the same pattern to their own additions.
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+# Downstream images MUST provide their own conf/*.xml (and any adapters they
+# need) before the container can start.
+CMD ["./LS.sh", "run"]
diff --git a/lightstreamer_7-jdk21-temurin/Dockerfile b/lightstreamer_7-jdk21-temurin/Dockerfile
new file mode 100644
index 0000000..dd5e820
--- /dev/null
+++ b/lightstreamer_7-jdk21-temurin/Dockerfile
@@ -0,0 +1,55 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+FROM eclipse-temurin:21-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.4.8
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.4.8/Lightstreamer-7.4.8.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update; \
+        apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Adjust the logging configuration in order to log only on standard output
+        sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
+               -e '/<logger name="LightstreamerLogger.init/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerLogger.license/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerProxyAdapters/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               conf/lightstreamer_log_conf.xml; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Harmless on plain Docker (user 10000 still owns
+# the files and gets the same permissions via the user bits).
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer;
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+CMD ["./LS.sh", "run"]
\ No newline at end of file
diff --git a/lightstreamer_7-jdk21/Dockerfile b/lightstreamer_7-jdk21/Dockerfile
deleted file mode 100644
index 7cd1ed7..0000000
diff --git a/lightstreamer_7-jdk8-temurin-base/Dockerfile b/lightstreamer_7-jdk8-temurin-base/Dockerfile
new file mode 100644
index 0000000..ce26588
--- /dev/null
+++ b/lightstreamer_7-jdk8-temurin-base/Dockerfile
@@ -0,0 +1,61 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+# "Base" edition — same runtime as the full image, but with all content that
+# downstream images are expected to provide themselves removed: factory config
+# XMLs, welcome page, welcome-adapter resources, and PDF documentation.
+# The sed step that rewrites conf/lightstreamer_log_conf.xml is dropped too,
+# since the file it targets is stripped a moment later.
+
+FROM eclipse-temurin:8-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.4.8
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.4.8/Lightstreamer-7.4.8.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Strip content that downstream images are expected to provide themselves.
+        rm -rf docs pages adapters/welcome_res; \
+        rm -f conf/*.xml; \
+        rm -rf bin/unix-like/install; \
+        rm -rf bin/windows; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Downstream images that add content (conf/,
+# adapters/) should apply the same pattern to their own additions.
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+# Downstream images MUST provide their own conf/*.xml (and any adapters they
+# need) before the container can start.
+CMD ["./LS.sh", "run"]
diff --git a/lightstreamer_7-jdk8-temurin/Dockerfile b/lightstreamer_7-jdk8-temurin/Dockerfile
new file mode 100644
index 0000000..ce1798a
--- /dev/null
+++ b/lightstreamer_7-jdk8-temurin/Dockerfile
@@ -0,0 +1,55 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+FROM eclipse-temurin:8-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.4.8
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.4.8/Lightstreamer-7.4.8.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update; \
+        apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Adjust the logging configuration in order to log only on standard output
+        sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
+               -e '/<logger name="LightstreamerLogger.init/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerLogger.license/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerProxyAdapters/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               conf/lightstreamer_log_conf.xml; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Harmless on plain Docker (user 10000 still owns
+# the files and gets the same permissions via the user bits).
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer;
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+CMD ["./LS.sh", "run"]
\ No newline at end of file
diff --git a/lightstreamer_7-jdk8/Dockerfile b/lightstreamer_7-jdk8/Dockerfile
deleted file mode 100644
index 7cc0d6f..0000000
diff --git a/lightstreamer_7.0-base/Dockerfile b/lightstreamer_7.0-base/Dockerfile
new file mode 100644
index 0000000..513d7dc
--- /dev/null
+++ b/lightstreamer_7.0-base/Dockerfile
@@ -0,0 +1,63 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+# "Base" edition — same runtime as the full image, but with all content that
+# downstream images are expected to provide themselves removed: factory config
+# XMLs, welcome page, welcome-adapter resources, and PDF documentation.
+# The sed step that rewrites conf/lightstreamer_log_conf.xml is dropped too,
+# since the file it targets is stripped a moment later.
+
+FROM eclipse-temurin:11-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.0.3
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.0.3/Lightstreamer-7.0.3.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Replace the fictitious jdk path with the JAVA_HOME environment variable in the launch script file
+        sed -i -- 's/\/usr\/jdk1.8.0/$JAVA_HOME/' bin/unix-like/LS.sh; \
+# Strip content that downstream images are expected to provide themselves.
+        rm -rf DOCS-SDKs pages adapters/welcome_res; \
+        rm -f conf/*.xml; \
+        rm -rf bin/unix-like/install; \
+        rm -rf bin/windows; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Downstream images that add content (conf/,
+# adapters/) should apply the same pattern to their own additions.
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+# Downstream images MUST provide their own conf/*.xml (and any adapters they
+# need) before the container can start.
+CMD ["./LS.sh", "run"]
diff --git a/lightstreamer_7.0-jdk8-temurin-base/Dockerfile b/lightstreamer_7.0-jdk8-temurin-base/Dockerfile
new file mode 100644
index 0000000..7be1436
--- /dev/null
+++ b/lightstreamer_7.0-jdk8-temurin-base/Dockerfile
@@ -0,0 +1,63 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+# "Base" edition — same runtime as the full image, but with all content that
+# downstream images are expected to provide themselves removed: factory config
+# XMLs, welcome page, welcome-adapter resources, and PDF documentation.
+# The sed step that rewrites conf/lightstreamer_log_conf.xml is dropped too,
+# since the file it targets is stripped a moment later.
+
+FROM eclipse-temurin:8-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.0.3
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.0.3/Lightstreamer-7.0.3.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Replace the fictitious jdk path with the JAVA_HOME environment variable in the launch script file
+        sed -i -- 's/\/usr\/jdk1.8.0/$JAVA_HOME/' bin/unix-like/LS.sh; \
+# Strip content that downstream images are expected to provide themselves.
+        rm -rf DOCS-SDKs pages adapters/welcome_res; \
+        rm -f conf/*.xml; \
+        rm -rf bin/unix-like/install; \
+        rm -rf bin/windows; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Downstream images that add content (conf/,
+# adapters/) should apply the same pattern to their own additions.
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+# Downstream images MUST provide their own conf/*.xml (and any adapters they
+# need) before the container can start.
+CMD ["./LS.sh", "run"]
diff --git a/lightstreamer_7.0-jdk8-temurin/Dockerfile b/lightstreamer_7.0-jdk8-temurin/Dockerfile
new file mode 100644
index 0000000..9ed0880
--- /dev/null
+++ b/lightstreamer_7.0-jdk8-temurin/Dockerfile
@@ -0,0 +1,57 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+FROM eclipse-temurin:8-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.0.3
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.0.3/Lightstreamer-7.0.3.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update; \
+        apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Replace the fictitious jdk path with the JAVA_HOME environment variable in the launch script file
+        sed -i -- 's/\/usr\/jdk1.8.0/$JAVA_HOME/' bin/unix-like/LS.sh; \
+# Adjust the logging configuration in order to log only on standard output
+        sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
+               -e '/<logger name="LightstreamerLogger.init/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerLogger.license/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerProxyAdapters/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               conf/lightstreamer_log_conf.xml; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Harmless on plain Docker (user 10000 still owns
+# the files and gets the same permissions via the user bits).
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer;
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+CMD ["./LS.sh", "run"]
\ No newline at end of file
diff --git a/lightstreamer_7.0-jdk8/Dockerfile b/lightstreamer_7.0-jdk8/Dockerfile
deleted file mode 100644
index d74e522..0000000
diff --git a/lightstreamer_7.0/Dockerfile b/lightstreamer_7.0/Dockerfile
index 7047310..fea7b62 100644
--- a/lightstreamer_7.0/Dockerfile
+++ b/lightstreamer_7.0/Dockerfile
@@ -1,51 +1,57 @@
-# Set the base image
-FROM eclipse-temurin:11-jdk
-
-LABEL maintainer="Lightstreamer Server Development Team <support@lightstreamer.com>"
-
-# Add gpg, which is missing in the eclipse-temurin image
-RUN apt-get -y update \
-        && apt-get -y install gnupg \
-        && rm -rf /var/lib/apt/lists/*
-
-# Import Lighstreamer's public key
-RUN gpg --batch --keyserver hkp://keyserver.ubuntu.com --recv-keys 9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
 
-# Set environment variables to identify the right Lightstreamer version and edition
-ENV LIGHTSTREAMER_URL_DOWNLOAD https://lightstreamer.com/distros/ls-server/7.0.3/Lightstreamer_7_0_3_20190315.tar.gz
-
-# Download the package from the Lightstreamer site, verify the signature, and unpack
-RUN set -ex; \
-        mkdir /lightstreamer && cd /lightstreamer \
-        && curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD} \
-        && curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc \
-        && gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz \
-        && tar -xvf Lightstreamer.tar.gz --strip-components=1 \
+FROM eclipse-temurin:11-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.0.3
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.0.3/Lightstreamer-7.0.3.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update; \
+        apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
 # Replace the fictitious jdk path with the JAVA_HOME environment variable in the launch script file
-        && sed -i -- 's/\/usr\/jdk1.8.0/$JAVA_HOME/' bin/unix-like/LS.sh \
+        sed -i -- 's/\/usr\/jdk1.8.0/$JAVA_HOME/' bin/unix-like/LS.sh; \
 # Adjust the logging configuration in order to log only on standard output
-        && sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
+        sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
                -e '/<logger name="LightstreamerLogger.init/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
                -e '/<logger name="LightstreamerLogger.license/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
                -e '/<logger name="LightstreamerProxyAdapters/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
-                  conf/lightstreamer_log_conf.xml \
-# Remove unneeded folder
-        && rm -fr /lightstreamer/DOCS-SDKs \
-# Add new user and group
-        && groupadd -r -g 10000 lightstreamer \
-        && useradd --no-log-init -r -g lightstreamer -u 10000 lightstreamer \
-# Change ownership of the lightstreamer folder
-        && chown -R lightstreamer:lightstreamer ../lightstreamer \
-# Finally, remove no longer needed files
-        && rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc
-
-USER lightstreamer
-
-# Export TCP port 8080
+               conf/lightstreamer_log_conf.xml; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Harmless on plain Docker (user 10000 still owns
+# the files and gets the same permissions via the user bits).
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer;
+
+USER 10000:10000
+
 EXPOSE 8080
 
-# Set the final working dir
 WORKDIR /lightstreamer/bin/unix-like
 
-# Start the server
 CMD ["./LS.sh", "run"]
\ No newline at end of file
diff --git a/lightstreamer_7.1-base/Dockerfile b/lightstreamer_7.1-base/Dockerfile
new file mode 100644
index 0000000..d8c4532
--- /dev/null
+++ b/lightstreamer_7.1-base/Dockerfile
@@ -0,0 +1,64 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+# "Base" edition — same runtime as the full image, but with all content that
+# downstream images are expected to provide themselves removed: factory config
+# XMLs, welcome page, welcome-adapter resources, and PDF documentation.
+# The sed step that rewrites conf/lightstreamer_log_conf.xml is dropped too,
+# since the file it targets is stripped a moment later.
+
+FROM eclipse-temurin:11-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.1.3
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.1.3/Lightstreamer-7.1.3.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Replace the fictitious jdk path with the JAVA_HOME environment variable in the launch script file
+        sed -i -- 's/\/usr\/jdk1.8.0/$JAVA_HOME/' bin/unix-like/LS.sh; \
+# Strip content that downstream images are expected to provide themselves.
+        rm -rf docs pages adapters/welcome_res; \
+        rm -f conf/*.xml; \
+        rm -rf bin/unix-like/install; \
+        rm -rf bin/windows; \
+        rm -rf adapter_remoting_infrastructure; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Downstream images that add content (conf/,
+# adapters/) should apply the same pattern to their own additions.
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+# Downstream images MUST provide their own conf/*.xml (and any adapters they
+# need) before the container can start.
+CMD ["./LS.sh", "run"]
diff --git a/lightstreamer_7.1-jdk8-temurin-base/Dockerfile b/lightstreamer_7.1-jdk8-temurin-base/Dockerfile
new file mode 100644
index 0000000..027b350
--- /dev/null
+++ b/lightstreamer_7.1-jdk8-temurin-base/Dockerfile
@@ -0,0 +1,64 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+# "Base" edition — same runtime as the full image, but with all content that
+# downstream images are expected to provide themselves removed: factory config
+# XMLs, welcome page, welcome-adapter resources, and PDF documentation.
+# The sed step that rewrites conf/lightstreamer_log_conf.xml is dropped too,
+# since the file it targets is stripped a moment later.
+
+FROM eclipse-temurin:8-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.1.3
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.1.3/Lightstreamer-7.1.3.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Replace the fictitious jdk path with the JAVA_HOME environment variable in the launch script file
+        sed -i -- 's/\/usr\/jdk1.8.0/$JAVA_HOME/' bin/unix-like/LS.sh; \
+# Strip content that downstream images are expected to provide themselves.
+        rm -rf docs pages adapters/welcome_res; \
+        rm -f conf/*.xml; \
+        rm -rf bin/unix-like/install; \
+        rm -rf bin/windows; \
+        rm -rf adapter_remoting_infrastructure; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Downstream images that add content (conf/,
+# adapters/) should apply the same pattern to their own additions.
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+# Downstream images MUST provide their own conf/*.xml (and any adapters they
+# need) before the container can start.
+CMD ["./LS.sh", "run"]
diff --git a/lightstreamer_7.1-jdk8-temurin/Dockerfile b/lightstreamer_7.1-jdk8-temurin/Dockerfile
new file mode 100644
index 0000000..160e77c
--- /dev/null
+++ b/lightstreamer_7.1-jdk8-temurin/Dockerfile
@@ -0,0 +1,57 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+FROM eclipse-temurin:8-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.1.3
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.1.3/Lightstreamer-7.1.3.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update; \
+        apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Replace the fictitious jdk path with the JAVA_HOME environment variable in the launch script file
+        sed -i -- 's/\/usr\/jdk1.8.0/$JAVA_HOME/' bin/unix-like/LS.sh; \
+# Adjust the logging configuration in order to log only on standard output
+        sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
+               -e '/<logger name="LightstreamerLogger.init/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerLogger.license/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerProxyAdapters/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               conf/lightstreamer_log_conf.xml; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Harmless on plain Docker (user 10000 still owns
+# the files and gets the same permissions via the user bits).
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer;
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+CMD ["./LS.sh", "run"]
\ No newline at end of file
diff --git a/lightstreamer_7.1-jdk8/Dockerfile b/lightstreamer_7.1-jdk8/Dockerfile
deleted file mode 100644
index e81acf4..0000000
diff --git a/lightstreamer_7.1/Dockerfile b/lightstreamer_7.1/Dockerfile
index e86fa7e..f5394dc 100644
--- a/lightstreamer_7.1/Dockerfile
+++ b/lightstreamer_7.1/Dockerfile
@@ -1,49 +1,57 @@
-# Set the base image
-FROM eclipse-temurin:11-jdk
-
-LABEL maintainer="Lightstreamer Server Development Team <support@lightstreamer.com>"
-
-# Add gpg, which is missing in the eclipse-temurin image
-RUN apt-get -y update \
-        && apt-get -y install gnupg \
-        && rm -rf /var/lib/apt/lists/*
-
-# Import Lighstreamer's public key
-RUN gpg --batch --keyserver hkp://keyserver.ubuntu.com --recv-keys 9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
 
-# Set environment variables to identify the right Lightstreamer version and edition
-ENV LIGHTSTREAMER_URL_DOWNLOAD https://lightstreamer.com/distros/ls-server/7.1.3/Lightstreamer_7_1_3.tar.gz
-
-# Download the package from the Lightstreamer site, verify the signature, and unpack
-RUN set -ex; \
-        mkdir /lightstreamer && cd /lightstreamer \
-        && curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD} \
-        && curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc \
-        && gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz \
-        && tar -xvf Lightstreamer.tar.gz --strip-components=1 \
+FROM eclipse-temurin:11-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.1.3
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.1.3/Lightstreamer-7.1.3.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update; \
+        apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
 # Replace the fictitious jdk path with the JAVA_HOME environment variable in the launch script file
-        && sed -i -- 's/\/usr\/jdk1.8.0/$JAVA_HOME/' bin/unix-like/LS.sh \
+        sed -i -- 's/\/usr\/jdk1.8.0/$JAVA_HOME/' bin/unix-like/LS.sh; \
 # Adjust the logging configuration in order to log only on standard output
-        && sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
+        sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
                -e '/<logger name="LightstreamerLogger.init/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
                -e '/<logger name="LightstreamerLogger.license/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
                -e '/<logger name="LightstreamerProxyAdapters/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
-                  conf/lightstreamer_log_conf.xml \
-# Add new user and group
-        && groupadd -r -g 10000 lightstreamer \
-        && useradd --no-log-init -r -g lightstreamer -u 10000 lightstreamer \
-# Change ownership of the lightstreamer folder
-        && chown -R lightstreamer:lightstreamer ../lightstreamer \
-# Finally, remove no longer needed files
-        && rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc
-
-USER lightstreamer
-
-# Export TCP port 8080
+               conf/lightstreamer_log_conf.xml; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Harmless on plain Docker (user 10000 still owns
+# the files and gets the same permissions via the user bits).
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer;
+
+USER 10000:10000
+
 EXPOSE 8080
 
-# Set the final working dir
 WORKDIR /lightstreamer/bin/unix-like
 
-# Start the server
 CMD ["./LS.sh", "run"]
\ No newline at end of file
diff --git a/lightstreamer_7.2-base/Dockerfile b/lightstreamer_7.2-base/Dockerfile
new file mode 100644
index 0000000..aec740b
--- /dev/null
+++ b/lightstreamer_7.2-base/Dockerfile
@@ -0,0 +1,61 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+# "Base" edition — same runtime as the full image, but with all content that
+# downstream images are expected to provide themselves removed: factory config
+# XMLs, welcome page, welcome-adapter resources, and PDF documentation.
+# The sed step that rewrites conf/lightstreamer_log_conf.xml is dropped too,
+# since the file it targets is stripped a moment later.
+
+FROM eclipse-temurin:11-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.2.2
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.2.2/Lightstreamer-7.2.2.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Strip content that downstream images are expected to provide themselves.
+        rm -rf docs pages adapters/welcome_res; \
+        rm -f conf/*.xml; \
+        rm -rf bin/unix-like/install; \
+        rm -rf bin/windows; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Downstream images that add content (conf/,
+# adapters/) should apply the same pattern to their own additions.
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+# Downstream images MUST provide their own conf/*.xml (and any adapters they
+# need) before the container can start.
+CMD ["./LS.sh", "run"]
diff --git a/lightstreamer_7.2-jdk8-temurin-base/Dockerfile b/lightstreamer_7.2-jdk8-temurin-base/Dockerfile
new file mode 100644
index 0000000..398f932
--- /dev/null
+++ b/lightstreamer_7.2-jdk8-temurin-base/Dockerfile
@@ -0,0 +1,61 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+# "Base" edition — same runtime as the full image, but with all content that
+# downstream images are expected to provide themselves removed: factory config
+# XMLs, welcome page, welcome-adapter resources, and PDF documentation.
+# The sed step that rewrites conf/lightstreamer_log_conf.xml is dropped too,
+# since the file it targets is stripped a moment later.
+
+FROM eclipse-temurin:8-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.2.2
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.2.2/Lightstreamer-7.2.2.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Strip content that downstream images are expected to provide themselves.
+        rm -rf docs pages adapters/welcome_res; \
+        rm -f conf/*.xml; \
+        rm -rf bin/unix-like/install; \
+        rm -rf bin/windows; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Downstream images that add content (conf/,
+# adapters/) should apply the same pattern to their own additions.
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+# Downstream images MUST provide their own conf/*.xml (and any adapters they
+# need) before the container can start.
+CMD ["./LS.sh", "run"]
diff --git a/lightstreamer_7.2-jdk8-temurin/Dockerfile b/lightstreamer_7.2-jdk8-temurin/Dockerfile
new file mode 100644
index 0000000..dce0ff1
--- /dev/null
+++ b/lightstreamer_7.2-jdk8-temurin/Dockerfile
@@ -0,0 +1,55 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+FROM eclipse-temurin:8-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.2.2
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.2.2/Lightstreamer-7.2.2.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update; \
+        apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Adjust the logging configuration in order to log only on standard output
+        sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
+               -e '/<logger name="LightstreamerLogger.init/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerLogger.license/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerProxyAdapters/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               conf/lightstreamer_log_conf.xml; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Harmless on plain Docker (user 10000 still owns
+# the files and gets the same permissions via the user bits).
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer;
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+CMD ["./LS.sh", "run"]
\ No newline at end of file
diff --git a/lightstreamer_7.2-jdk8/Dockerfile b/lightstreamer_7.2-jdk8/Dockerfile
deleted file mode 100644
index cff968a..0000000
diff --git a/lightstreamer_7.2/Dockerfile b/lightstreamer_7.2/Dockerfile
index 0e48961..a3195e9 100644
--- a/lightstreamer_7.2/Dockerfile
+++ b/lightstreamer_7.2/Dockerfile
@@ -1,48 +1,55 @@
-# Set the base image
-FROM eclipse-temurin:11-jdk
-
-LABEL maintainer="Lightstreamer Server Development Team <support@lightstreamer.com>"
-
-# Add gpg, which is missing in the eclipse-temurin image
-RUN apt-get -y update \
-        && apt-get -y install gnupg \
-        && rm -rf /var/lib/apt/lists/*
-
-# Import Lighstreamer's public key
-RUN gpg --batch --keyserver hkp://keyserver.ubuntu.com --recv-keys 9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
 
-# Set environment variables to identify the right Lightstreamer version and edition
-ENV LIGHTSTREAMER_VERSION 7.2.2
-ENV LIGHTSTREAMER_URL_DOWNLOAD https://lightstreamer.com/distros/ls-server/${LIGHTSTREAMER_VERSION}/Lightstreamer-${LIGHTSTREAMER_VERSION}.tar.gz
-
-# Download the package from the Lightstreamer site, verify the signature, and unpack
-RUN set -ex; \
-        mkdir /lightstreamer && cd /lightstreamer \
-        && curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD} \
-        && curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc \
-        && gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz \
-        && tar -xvf Lightstreamer.tar.gz --strip-components=1 \
+FROM eclipse-temurin:11-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.2.2
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.2.2/Lightstreamer-7.2.2.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update; \
+        apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
 # Adjust the logging configuration in order to log only on standard output
-        && sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
+        sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
                -e '/<logger name="LightstreamerLogger.init/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
                -e '/<logger name="LightstreamerLogger.license/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
                -e '/<logger name="LightstreamerProxyAdapters/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
-                  conf/lightstreamer_log_conf.xml \
-# Add new user and group
-        && groupadd -r -g 10000 lightstreamer \
-        && useradd --no-log-init -r -g lightstreamer -u 10000 lightstreamer \
-# Change ownership of the lightstreamer folder
-        && chown -R lightstreamer:lightstreamer ../lightstreamer \
-# Finally, remove no longer needed files
-        && rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc
-
-USER lightstreamer
-
-# Export TCP port 8080
+               conf/lightstreamer_log_conf.xml; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Harmless on plain Docker (user 10000 still owns
+# the files and gets the same permissions via the user bits).
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer;
+
+USER 10000:10000
+
 EXPOSE 8080
 
-# Set the final working dir
 WORKDIR /lightstreamer/bin/unix-like
 
-# Start the server
 CMD ["./LS.sh", "run"]
\ No newline at end of file
diff --git a/lightstreamer_7.3-base/Dockerfile b/lightstreamer_7.3-base/Dockerfile
new file mode 100644
index 0000000..af40113
--- /dev/null
+++ b/lightstreamer_7.3-base/Dockerfile
@@ -0,0 +1,61 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+# "Base" edition — same runtime as the full image, but with all content that
+# downstream images are expected to provide themselves removed: factory config
+# XMLs, welcome page, welcome-adapter resources, and PDF documentation.
+# The sed step that rewrites conf/lightstreamer_log_conf.xml is dropped too,
+# since the file it targets is stripped a moment later.
+
+FROM eclipse-temurin:17-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.3.3
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.3.3/Lightstreamer-7.3.3.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Strip content that downstream images are expected to provide themselves.
+        rm -rf docs pages adapters/welcome_res; \
+        rm -f conf/*.xml; \
+        rm -rf bin/unix-like/install; \
+        rm -rf bin/windows; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Downstream images that add content (conf/,
+# adapters/) should apply the same pattern to their own additions.
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+# Downstream images MUST provide their own conf/*.xml (and any adapters they
+# need) before the container can start.
+CMD ["./LS.sh", "run"]
diff --git a/lightstreamer_7.3-jdk11-temurin-base/Dockerfile b/lightstreamer_7.3-jdk11-temurin-base/Dockerfile
new file mode 100644
index 0000000..709d695
--- /dev/null
+++ b/lightstreamer_7.3-jdk11-temurin-base/Dockerfile
@@ -0,0 +1,61 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+# "Base" edition — same runtime as the full image, but with all content that
+# downstream images are expected to provide themselves removed: factory config
+# XMLs, welcome page, welcome-adapter resources, and PDF documentation.
+# The sed step that rewrites conf/lightstreamer_log_conf.xml is dropped too,
+# since the file it targets is stripped a moment later.
+
+FROM eclipse-temurin:11-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.3.3
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.3.3/Lightstreamer-7.3.3.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Strip content that downstream images are expected to provide themselves.
+        rm -rf docs pages adapters/welcome_res; \
+        rm -f conf/*.xml; \
+        rm -rf bin/unix-like/install; \
+        rm -rf bin/windows; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Downstream images that add content (conf/,
+# adapters/) should apply the same pattern to their own additions.
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+# Downstream images MUST provide their own conf/*.xml (and any adapters they
+# need) before the container can start.
+CMD ["./LS.sh", "run"]
diff --git a/lightstreamer_7.3-jdk11-temurin/Dockerfile b/lightstreamer_7.3-jdk11-temurin/Dockerfile
new file mode 100644
index 0000000..fe24f85
--- /dev/null
+++ b/lightstreamer_7.3-jdk11-temurin/Dockerfile
@@ -0,0 +1,55 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+FROM eclipse-temurin:11-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.3.3
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.3.3/Lightstreamer-7.3.3.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update; \
+        apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Adjust the logging configuration in order to log only on standard output
+        sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
+               -e '/<logger name="LightstreamerLogger.init/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerLogger.license/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerProxyAdapters/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               conf/lightstreamer_log_conf.xml; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Harmless on plain Docker (user 10000 still owns
+# the files and gets the same permissions via the user bits).
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer;
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+CMD ["./LS.sh", "run"]
\ No newline at end of file
diff --git a/lightstreamer_7.3-jdk11/Dockerfile b/lightstreamer_7.3-jdk11/Dockerfile
deleted file mode 100644
index 4f77ee4..0000000
diff --git a/lightstreamer_7.3-jdk8-temurin-base/Dockerfile b/lightstreamer_7.3-jdk8-temurin-base/Dockerfile
new file mode 100644
index 0000000..efc0eaa
--- /dev/null
+++ b/lightstreamer_7.3-jdk8-temurin-base/Dockerfile
@@ -0,0 +1,61 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+# "Base" edition — same runtime as the full image, but with all content that
+# downstream images are expected to provide themselves removed: factory config
+# XMLs, welcome page, welcome-adapter resources, and PDF documentation.
+# The sed step that rewrites conf/lightstreamer_log_conf.xml is dropped too,
+# since the file it targets is stripped a moment later.
+
+FROM eclipse-temurin:8-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.3.3
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.3.3/Lightstreamer-7.3.3.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Strip content that downstream images are expected to provide themselves.
+        rm -rf docs pages adapters/welcome_res; \
+        rm -f conf/*.xml; \
+        rm -rf bin/unix-like/install; \
+        rm -rf bin/windows; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Downstream images that add content (conf/,
+# adapters/) should apply the same pattern to their own additions.
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+# Downstream images MUST provide their own conf/*.xml (and any adapters they
+# need) before the container can start.
+CMD ["./LS.sh", "run"]
diff --git a/lightstreamer_7.3-jdk8-temurin/Dockerfile b/lightstreamer_7.3-jdk8-temurin/Dockerfile
new file mode 100644
index 0000000..b18673e
--- /dev/null
+++ b/lightstreamer_7.3-jdk8-temurin/Dockerfile
@@ -0,0 +1,55 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+FROM eclipse-temurin:8-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.3.3
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.3.3/Lightstreamer-7.3.3.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update; \
+        apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Adjust the logging configuration in order to log only on standard output
+        sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
+               -e '/<logger name="LightstreamerLogger.init/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerLogger.license/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               -e '/<logger name="LightstreamerProxyAdapters/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
+               conf/lightstreamer_log_conf.xml; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Harmless on plain Docker (user 10000 still owns
+# the files and gets the same permissions via the user bits).
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer;
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+CMD ["./LS.sh", "run"]
\ No newline at end of file
diff --git a/lightstreamer_7.3-jdk8/Dockerfile b/lightstreamer_7.3-jdk8/Dockerfile
deleted file mode 100644
index a94ec90..0000000
diff --git a/lightstreamer_7.3/Dockerfile b/lightstreamer_7.3/Dockerfile
index 34a4361..ee98233 100644
--- a/lightstreamer_7.3/Dockerfile
+++ b/lightstreamer_7.3/Dockerfile
@@ -1,48 +1,55 @@
-# Set the base image
-FROM eclipse-temurin:17-jdk
-
-LABEL maintainer="Lightstreamer Server Development Team <support@lightstreamer.com>"
-
-# Add gpg, which is missing in the eclipse-temurin image
-RUN apt-get -y update \
-        && apt-get -y install gnupg \
-        && rm -rf /var/lib/apt/lists/*
-
-# Import Lighstreamer's public key
-RUN gpg --batch --keyserver hkp://keyserver.ubuntu.com --recv-keys 9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
 
-# Set environment variables to identify the right Lightstreamer version and edition
-ENV LIGHTSTREAMER_VERSION 7.3.3
-ENV LIGHTSTREAMER_URL_DOWNLOAD https://lightstreamer.com/distros/ls-server/${LIGHTSTREAMER_VERSION}/Lightstreamer-${LIGHTSTREAMER_VERSION}.tar.gz
-
-# Download the package from the Lightstreamer site, verify the signature, and unpack
-RUN set -ex; \
-        mkdir /lightstreamer && cd /lightstreamer \
-        && curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD} \
-        && curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc \
-        && gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz \
-        && tar -xvf Lightstreamer.tar.gz --strip-components=1 \
+FROM eclipse-temurin:17-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.3.3
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.3.3/Lightstreamer-7.3.3.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update; \
+        apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
 # Adjust the logging configuration in order to log only on standard output
-        && sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
+        sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
                -e '/<logger name="LightstreamerLogger.init/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
                -e '/<logger name="LightstreamerLogger.license/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
                -e '/<logger name="LightstreamerProxyAdapters/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
-                  conf/lightstreamer_log_conf.xml \
-# Add new user and group
-        && groupadd -r -g 10000 lightstreamer \
-        && useradd --no-log-init -r -g lightstreamer -u 10000 lightstreamer \
-# Change ownership of the lightstreamer folder
-        && chown -R lightstreamer:lightstreamer ../lightstreamer \
-# Finally, remove no longer needed files
-        && rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc
-
-USER lightstreamer
-
-# Export TCP port 8080
+               conf/lightstreamer_log_conf.xml; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Harmless on plain Docker (user 10000 still owns
+# the files and gets the same permissions via the user bits).
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer;
+
+USER 10000:10000
+
 EXPOSE 8080
 
-# Set the final working dir
 WORKDIR /lightstreamer/bin/unix-like
 
-# Start the server
 CMD ["./LS.sh", "run"]
\ No newline at end of file
diff --git a/lightstreamer_base/Dockerfile b/lightstreamer_base/Dockerfile
new file mode 100644
index 0000000..bc18b9a
--- /dev/null
+++ b/lightstreamer_base/Dockerfile
@@ -0,0 +1,61 @@
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
+
+# "Base" edition — same runtime as the full image, but with all content that
+# downstream images are expected to provide themselves removed: factory config
+# XMLs, welcome page, welcome-adapter resources, and PDF documentation.
+# The sed step that rewrites conf/lightstreamer_log_conf.xml is dropped too,
+# since the file it targets is stripped a moment later.
+
+FROM eclipse-temurin:25-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
+ENV LIGHTSTREAMER_VERSION=7.4.8
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.4.8/Lightstreamer-7.4.8.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update && apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
+# Strip content that downstream images are expected to provide themselves.
+        rm -rf docs pages adapters/welcome_res; \
+        rm -f conf/*.xml; \
+        rm -rf bin/unix-like/install; \
+        rm -rf bin/windows; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Downstream images that add content (conf/,
+# adapters/) should apply the same pattern to their own additions.
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer
+
+USER 10000:10000
+
+EXPOSE 8080
+
+WORKDIR /lightstreamer/bin/unix-like
+
+# Downstream images MUST provide their own conf/*.xml (and any adapters they
+# need) before the container can start.
+CMD ["./LS.sh", "run"]
diff --git a/lightstreamer_latest/Dockerfile b/lightstreamer_latest/Dockerfile
index cf0d2ec..8c92914 100644
--- a/lightstreamer_latest/Dockerfile
+++ b/lightstreamer_latest/Dockerfile
@@ -1,49 +1,55 @@
-# Set the base image
-FROM eclipse-temurin:25-jdk
-
-LABEL maintainer="Lightstreamer Server Development Team <support@lightstreamer.com>"
-
-# Add gpg, which is missing in the eclipse-temurin image
-RUN apt-get -y update \
-        && apt-get -y install gnupg \
-        && apt-get -y install curl \
-        && rm -rf /var/lib/apt/lists/*
-
-# Import Lighstreamer's public key
-RUN gpg --batch --keyserver hkp://keyserver.ubuntu.com --recv-keys 9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+#
+# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
+#
+# PLEASE DO NOT EDIT IT DIRECTLY.
+#
 
-# Set environment variables to identify the right Lightstreamer version and edition
+FROM eclipse-temurin:25-jdk
+LABEL org.opencontainers.image.authors="Lightstreamer Server Development Team <support@lightstreamer.com>"
 ENV LIGHTSTREAMER_VERSION=7.4.8
-ENV LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/${LIGHTSTREAMER_VERSION}/Lightstreamer-${LIGHTSTREAMER_VERSION}.tar.gz
-
-# Download the package from the Lightstreamer site, verify the signature, and unpack
-RUN set -ex; \
-        mkdir /lightstreamer && cd /lightstreamer \
-        && curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD} \
-        && curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc \
-        && gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz \
-        && tar -xvf Lightstreamer.tar.gz --strip-components=1 \
+
+ARG LIGHTSTREAMER_URL_DOWNLOAD=https://lightstreamer.com/distros/ls-server/7.4.8/Lightstreamer-7.4.8.tar.gz
+ARG FINGERPRINT=9B90BFD14309C7DA5EF58D7D4A8C08966F29B4D2
+
+WORKDIR /lightstreamer
+
+RUN set -eux; \
+        apt-get update; \
+        apt-get install -y --no-install-recommends curl gnupg; \
+# Download the package from the Lightstreamer site
+        curl -fSL -o Lightstreamer.tar.gz ${LIGHTSTREAMER_URL_DOWNLOAD}; \
+        curl -fSL -o Lightstreamer.tar.gz.asc ${LIGHTSTREAMER_URL_DOWNLOAD}.asc; \
+# Import Lightstreamer's public key and verify the signature of the downloaded package
+        GNUPGHOME="$(mktemp -d)"; \
+        export GNUPGHOME; \
+        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "${FINGERPRINT}"; \
+        gpg --batch --verify Lightstreamer.tar.gz.asc Lightstreamer.tar.gz; \
+# Unpack
+        tar -xf Lightstreamer.tar.gz --strip-components=1; \
 # Adjust the logging configuration in order to log only on standard output
-        && sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
+        sed -i -e 's/<appender-ref ref="LSDailyRolling" \/>/<appender-ref ref="LSConsole" \/>/' \
                -e '/<logger name="LightstreamerLogger.init/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
                -e '/<logger name="LightstreamerLogger.license/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
                -e '/<logger name="LightstreamerProxyAdapters/,+2s/<appender-ref ref="LSConsole" \/>/<!-- <appender-ref ref="LSConsole" \/> -->/' \
-                  conf/lightstreamer_log_conf.xml \
-# Add new user and group
-        && groupadd -r -g 10000 lightstreamer \
-        && useradd --no-log-init -r -g lightstreamer -u 10000 lightstreamer \
-# Change ownership of the lightstreamer folder
-        && chown -R lightstreamer:lightstreamer ../lightstreamer \
-# Finally, remove no longer needed files
-        && rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc
-
-USER lightstreamer
-
-# Export TCP port 8080
+               conf/lightstreamer_log_conf.xml; \
+# Remove no longer needed files
+        rm Lightstreamer.tar.gz Lightstreamer.tar.gz.asc; \
+        gpgconf --kill all; \
+        rm -rf "$GNUPGHOME"; \
+        rm -rf /var/lib/apt/lists/*; \
+# Create a non-root user and group (UID/GID 10000) as the default runtime identity
+        groupadd -g 10000 lightstreamer; \
+        useradd --no-log-init -M -s /usr/sbin/nologin -g lightstreamer -u 10000 lightstreamer; \
+# Group-owned by root (GID 0) and g=u so OpenShift's arbitrary UID (always in
+# root group) can read/write. Harmless on plain Docker (user 10000 still owns
+# the files and gets the same permissions via the user bits).
+        chown -R lightstreamer:root /lightstreamer; \
+        chmod -R g=u /lightstreamer;
+
+USER 10000:10000
+
 EXPOSE 8080
 
-# Set the final working dir
 WORKDIR /lightstreamer/bin/unix-like
 
-# Start the server
 CMD ["./LS.sh", "run"]
\ No newline at end of file

Relevant Maintainers:

@tianon
tianon merged commit 2e3010b into docker-library:master Jul 30, 2026
37 checks passed
@tianon

tianon commented Jul 30, 2026

Copy link
Copy Markdown
Member

Just to make sure, are all these older lightstreamer versions still actively supported? ie, if there's a security issue, will they have a new release?

@gfinocchiaro

Copy link
Copy Markdown
Contributor Author

Just to make sure, are all these older lightstreamer versions still actively supported? ie, if there's a security issue, will they have a new release?

Typically, only the latest version is actively supported and will receive updates in case of security issues. However, this may vary based on specific customer needs.

@tianon

tianon commented Jul 31, 2026

Copy link
Copy Markdown
Member

Ah, so in that case, all those older versions should be removed 😅

As a reminder / supplementary note, removing tags here will remove them from the "Supported" section on the Hub readme (and will prevent us from spending cycles rebuilding them on the official build servers), but the tags will still be available to users who want them. (See https://github.com/docker-library/official-images#library-definition-files for more detail on this.)

@gfinocchiaro

Copy link
Copy Markdown
Contributor Author

Thanks @tianon for clarifying. In the next PR we will remove no longer supported tags.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants