From 9324e4049c08596ec9c598dddc0bdab5619d276b Mon Sep 17 00:00:00 2001 From: Gabriel Roldan Date: Wed, 18 May 2022 21:40:29 -0300 Subject: [PATCH] Use common base docker images to share layers across service images --- .github/workflows/pull-request.yaml | 4 + Makefile | 6 +- src/apps/base-images/geoserver/Dockerfile | 38 ++++++++ src/apps/base-images/geoserver/pom.xml | 94 +++++++++++++++++++ .../geoserver/cloud/app/dummy/DummyApp.java | 18 ++++ src/apps/base-images/jre/Dockerfile | 16 ++++ src/apps/base-images/jre/pom.xml | 57 +++++++++++ src/apps/base-images/pom.xml | 16 ++++ src/apps/base-images/spring-boot/Dockerfile | 44 +++++++++ src/apps/base-images/spring-boot/pom.xml | 88 +++++++++++++++++ .../geoserver/cloud/app/dummy/DummyApp.java | 18 ++++ src/apps/geoserver/gwc/Dockerfile | 39 +------- src/apps/geoserver/gwc/pom.xml | 15 +-- .../cloud/gwc/app/GeoWebCacheApplication.java | 8 +- src/apps/geoserver/pom.xml | 19 ++++ src/apps/geoserver/restconfig/Dockerfile | 47 +--------- src/apps/geoserver/restconfig/pom.xml | 11 +-- src/apps/geoserver/wcs/Dockerfile | 37 +------- src/apps/geoserver/wcs/pom.xml | 15 +-- src/apps/geoserver/webui/Dockerfile | 52 +--------- src/apps/geoserver/webui/pom.xml | 15 +-- src/apps/geoserver/wfs/Dockerfile | 38 +------- src/apps/geoserver/wfs/pom.xml | 15 +-- src/apps/geoserver/wms/Dockerfile | 48 +--------- src/apps/geoserver/wms/pom.xml | 7 +- src/apps/geoserver/wps/Dockerfile | 37 +------- src/apps/geoserver/wps/pom.xml | 12 --- src/apps/infrastructure/admin/Dockerfile | 13 +-- src/apps/infrastructure/admin/pom.xml | 3 + src/apps/infrastructure/config/Dockerfile | 27 ++---- src/apps/infrastructure/config/pom.xml | 3 + src/apps/infrastructure/discovery/Dockerfile | 24 +---- src/apps/infrastructure/discovery/pom.xml | 3 + src/apps/infrastructure/gateway/Dockerfile | 24 +---- src/apps/infrastructure/gateway/pom.xml | 3 + src/apps/pom.xml | 1 + 36 files changed, 508 insertions(+), 407 deletions(-) create mode 100644 src/apps/base-images/geoserver/Dockerfile create mode 100644 src/apps/base-images/geoserver/pom.xml create mode 100644 src/apps/base-images/geoserver/src/main/java/org/geoserver/cloud/app/dummy/DummyApp.java create mode 100644 src/apps/base-images/jre/Dockerfile create mode 100644 src/apps/base-images/jre/pom.xml create mode 100644 src/apps/base-images/pom.xml create mode 100644 src/apps/base-images/spring-boot/Dockerfile create mode 100644 src/apps/base-images/spring-boot/pom.xml create mode 100644 src/apps/base-images/spring-boot/src/main/java/org/geoserver/cloud/app/dummy/DummyApp.java diff --git a/.github/workflows/pull-request.yaml b/.github/workflows/pull-request.yaml index 2a1eb8e74..a6d25ee4f 100644 --- a/.github/workflows/pull-request.yaml +++ b/.github/workflows/pull-request.yaml @@ -43,6 +43,10 @@ jobs: run: | make test + - name: Build images + run: | + make build-image + - name: Remove project jars from cached repository run: | rm -rf ~/.m2/repository/org/geoserver diff --git a/Makefile b/Makefile index a0092a25b..cd29c5870 100644 --- a/Makefile +++ b/Makefile @@ -18,10 +18,14 @@ install: test: ./mvnw verify -ntp -T4 -build-image: build-image-infrastructure build-image-geoserver +build-image: build-base-images build-image-infrastructure build-image-geoserver build-image-openj9: build-image-infrastructure-openj9 build-image-geoserver-openj9 +build-base-images: + ./mvnw clean package -f src/apps/base-images \ + -Ddocker -Ddockerfile.push.skip=true -ntp -Dfmt.skip -DskipTests + build-image-infrastructure: ./mvnw clean package -f src/apps/infrastructure \ -Ddocker -Ddockerfile.push.skip=$(SKIP_PUSH) -ntp -Dfmt.skip -DskipTests diff --git a/src/apps/base-images/geoserver/Dockerfile b/src/apps/base-images/geoserver/Dockerfile new file mode 100644 index 000000000..a9ae9724a --- /dev/null +++ b/src/apps/base-images/geoserver/Dockerfile @@ -0,0 +1,38 @@ +ARG TAG=latest +FROM geoservercloud/gs-cloud-base-jre:$TAG as builder +ARG JAR_FILE=target/gs-cloud-*-bin.jar + +COPY ${JAR_FILE} application.jar + +RUN java -Djarmode=layertools -jar application.jar extract + +########## +FROM geoservercloud/gs-cloud-base-spring-boot:$TAG + +# init +RUN apt update \ +&& apt -y upgrade \ +&& apt install -y --no-install-recommends \ +fonts-deva \ +fonts-font-awesome \ +fonts-freefont-ttf \ +fonts-material-design-icons-iconfont \ +fonts-materialdesignicons-webfont \ +fonts-roboto \ +&& apt clean \ +&& apt purge -y \ +&& apt autoremove --purge -y \ +&& rm -rf /var/cache/apt/* \ +&& rm -rf /var/lib/apt/lists/* + +RUN mkdir -p /opt/app/data_directory /data/geowebcache \ +&& chmod 0777 /opt/app/data_directory /data/geowebcache + +VOLUME /opt/app/data_directory +VOLUME /data/geowebcache + +WORKDIR /opt/app/bin + +COPY --from=builder dependencies/ ./ +COPY --from=builder snapshot-dependencies/ ./ +COPY --from=builder spring-boot-loader/ ./ diff --git a/src/apps/base-images/geoserver/pom.xml b/src/apps/base-images/geoserver/pom.xml new file mode 100644 index 000000000..9d85fdc92 --- /dev/null +++ b/src/apps/base-images/geoserver/pom.xml @@ -0,0 +1,94 @@ + + + 4.0.0 + + org.geoserver.cloud.apps + gs-cloud-base-images + ${revision} + + gs-cloud-base-geoserver-image + jar + + false + ${project.artifactId} + + + + org.geoserver.cloud + gs-cloud-spring-factory + + + org.geoserver.cloud + gs-cloud-starter-webmvc + + + org.geoserver.cloud + gs-cloud-starter-security + + + org.geoserver.cloud + gs-cloud-starter-event-bus + + + org.geoserver.cloud + spring-boot-simplejndi + + + org.geoserver.cloud + gs-cloud-starter-vector-formats + + + org.geoserver.cloud + gs-cloud-starter-raster-formats + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + org.springframework.retry + spring-retry + + + org.springframework.boot + spring-boot-starter-aop + + + org.geoserver.cloud.apps + gs-cloud-base-spring-boot + ${project.version} + provided + + + + + docker + + false + + docker + + + + + + com.spotify + dockerfile-maven-plugin + + false + + + + push + + + true + + + + + + + + + diff --git a/src/apps/base-images/geoserver/src/main/java/org/geoserver/cloud/app/dummy/DummyApp.java b/src/apps/base-images/geoserver/src/main/java/org/geoserver/cloud/app/dummy/DummyApp.java new file mode 100644 index 000000000..2f9d4efbc --- /dev/null +++ b/src/apps/base-images/geoserver/src/main/java/org/geoserver/cloud/app/dummy/DummyApp.java @@ -0,0 +1,18 @@ +/* + * (c) 2022 Open Source Geospatial Foundation - all rights reserved This code is licensed under the + * GPL 2.0 license, available at the root application directory. + */ +package org.geoserver.cloud.app.dummy; + +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @since 1.0 + */ +@SpringBootApplication +public class DummyApp { + + public static void main(String... args) { + throw new UnsupportedOperationException(); + } +} diff --git a/src/apps/base-images/jre/Dockerfile b/src/apps/base-images/jre/Dockerfile new file mode 100644 index 000000000..ced0fcb6d --- /dev/null +++ b/src/apps/base-images/jre/Dockerfile @@ -0,0 +1,16 @@ +FROM eclipse-temurin:17-jre + +LABEL maintainer="GeoServer PSC " + +ENV JAVA_TOOL_OPTS="\ +--add-exports=java.desktop/sun.awt.image=ALL-UNNAMED \ +--add-opens=java.base/java.lang=ALL-UNNAMED \ +--add-opens=java.base/java.util=ALL-UNNAMED \ +--add-opens=java.base/java.lang.reflect=ALL-UNNAMED \ +--add-opens=java.base/java.text=ALL-UNNAMED \ +--add-opens=java.desktop/java.awt.font=ALL-UNNAMED \ +--add-opens=java.desktop/sun.awt.image=ALL-UNNAMED \ +--add-opens=java.naming/com.sun.jndi.ldap=ALL-UNNAMED \ +-Djava.awt.headless=true" + +ENV JAVA_OPTS= diff --git a/src/apps/base-images/jre/pom.xml b/src/apps/base-images/jre/pom.xml new file mode 100644 index 000000000..f556c7a06 --- /dev/null +++ b/src/apps/base-images/jre/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + + org.geoserver.cloud.apps + gs-cloud-base-images + ${revision} + + gs-cloud-base-jre + jar + Base JRE image + + false + ${project.artifactId} + + + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + true + + + + + + + docker + + false + + docker + + + + + + com.spotify + dockerfile-maven-plugin + + + push + + + true + + + + + + + + + diff --git a/src/apps/base-images/pom.xml b/src/apps/base-images/pom.xml new file mode 100644 index 000000000..ed3dfc67f --- /dev/null +++ b/src/apps/base-images/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + + org.geoserver.cloud.apps + gs-cloud-apps + ${revision} + + gs-cloud-base-images + pom + + jre + spring-boot + geoserver + + diff --git a/src/apps/base-images/spring-boot/Dockerfile b/src/apps/base-images/spring-boot/Dockerfile new file mode 100644 index 000000000..05dd6f6dc --- /dev/null +++ b/src/apps/base-images/spring-boot/Dockerfile @@ -0,0 +1,44 @@ +ARG TAG=latest +FROM geoservercloud/gs-cloud-base-jre:$TAG as builder +ARG JAR_FILE=target/gs-cloud-*-bin.jar + +COPY ${JAR_FILE} application.jar + +RUN java -Djarmode=layertools -jar application.jar extract + +########## +FROM geoservercloud/gs-cloud-base-jre:$TAG + +COPY target/config/ /etc/gscloud/ + +RUN mkdir -p /opt/app/bin + +WORKDIR /opt/app/bin + +ENV JAVA_TOOL_OPTS="\ +--add-exports=java.desktop/sun.awt.image=ALL-UNNAMED \ +--add-opens=java.base/java.lang=ALL-UNNAMED \ +--add-opens=java.base/java.util=ALL-UNNAMED \ +--add-opens=java.base/java.lang.reflect=ALL-UNNAMED \ +--add-opens=java.base/java.text=ALL-UNNAMED \ +--add-opens=java.desktop/java.awt.font=ALL-UNNAMED \ +--add-opens=java.desktop/sun.awt.image=ALL-UNNAMED \ +--add-opens=java.naming/com.sun.jndi.ldap=ALL-UNNAMED \ +-Djava.awt.headless=true" + +ENV JAVA_OPTS= +EXPOSE 8080 +EXPOSE 8081 + +COPY --from=builder dependencies/ ./ +COPY --from=builder snapshot-dependencies/ ./ +COPY --from=builder spring-boot-loader/ ./ + +HEALTHCHECK \ +--interval=10s \ +--timeout=5s \ +--start-period=30s \ +--retries=5 \ +CMD curl -f -s -o /dev/null localhost:8081/actuator/health || exit 1 + +CMD exec env USER_ID="$(id -u)" USER_GID="$(id -g)" java $JAVA_OPTS $JAVA_TOOL_OPTS org.springframework.boot.loader.JarLauncher diff --git a/src/apps/base-images/spring-boot/pom.xml b/src/apps/base-images/spring-boot/pom.xml new file mode 100644 index 000000000..f26ad1eab --- /dev/null +++ b/src/apps/base-images/spring-boot/pom.xml @@ -0,0 +1,88 @@ + + + 4.0.0 + + org.geoserver.cloud.apps + gs-cloud-base-images + ${revision} + + gs-cloud-base-spring-boot + jar + + false + ${project.artifactId} + + + + org.geoserver.cloud + gs-cloud-spring-boot-starter + + + org.geoserver.cloud.apps + gs-cloud-base-jre + ${project.version} + provided + + + + + + maven-resources-plugin + + + copy-resources + + copy-resources + + + validate + + ${basedir}/target/config + + + ${maven.multiModuleProjectDirectory}/config/ + false + + + + + + + + + + + docker + + false + + docker + + + + + + com.spotify + dockerfile-maven-plugin + + ${project.version} + false + + ${project.version} + + + + + push + + + true + + + + + + + + + diff --git a/src/apps/base-images/spring-boot/src/main/java/org/geoserver/cloud/app/dummy/DummyApp.java b/src/apps/base-images/spring-boot/src/main/java/org/geoserver/cloud/app/dummy/DummyApp.java new file mode 100644 index 000000000..2f9d4efbc --- /dev/null +++ b/src/apps/base-images/spring-boot/src/main/java/org/geoserver/cloud/app/dummy/DummyApp.java @@ -0,0 +1,18 @@ +/* + * (c) 2022 Open Source Geospatial Foundation - all rights reserved This code is licensed under the + * GPL 2.0 license, available at the root application directory. + */ +package org.geoserver.cloud.app.dummy; + +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @since 1.0 + */ +@SpringBootApplication +public class DummyApp { + + public static void main(String... args) { + throw new UnsupportedOperationException(); + } +} diff --git a/src/apps/geoserver/gwc/Dockerfile b/src/apps/geoserver/gwc/Dockerfile index 98b5cf910..0d942b6ba 100644 --- a/src/apps/geoserver/gwc/Dockerfile +++ b/src/apps/geoserver/gwc/Dockerfile @@ -1,4 +1,6 @@ -FROM eclipse-temurin:17-jre as builder +ARG TAG=latest +FROM geoservercloud/gs-cloud-base-jre:$TAG as builder + ARG JAR_FILE=target/gs-cloud-*-bin.jar COPY ${JAR_FILE} application.jar @@ -6,42 +8,11 @@ COPY ${JAR_FILE} application.jar RUN java -Djarmode=layertools -jar application.jar extract ########## -FROM eclipse-temurin:17-jre -COPY target/config/ /etc/gscloud/ - -LABEL maintainer="GeoServer PSC " - -RUN mkdir -p /opt/app/bin /opt/app/data_directory /data/geowebcache -RUN chmod 0777 /opt/app/data_directory /data/geowebcache - -VOLUME /opt/app/data_directory -VOLUME /data/geowebcache +FROM geoservercloud/gs-cloud-base-geoserver-image:$TAG -WORKDIR /opt/app/bin -ENV JAVA_TOOL_OPTS="\ ---add-exports=java.desktop/sun.awt.image=ALL-UNNAMED \ ---add-opens=java.base/java.lang=ALL-UNNAMED \ ---add-opens=java.base/java.util=ALL-UNNAMED \ ---add-opens=java.base/java.lang.reflect=ALL-UNNAMED \ ---add-opens=java.base/java.text=ALL-UNNAMED \ ---add-opens=java.desktop/java.awt.font=ALL-UNNAMED \ ---add-opens=java.desktop/sun.awt.image=ALL-UNNAMED \ ---add-opens=java.naming/com.sun.jndi.ldap=ALL-UNNAMED \ --Djava.awt.headless=true" -ENV JAVA_OPTS= - -EXPOSE 8080 +# WORKDIR already set to /opt/app/bin COPY --from=builder dependencies/ ./ COPY --from=builder snapshot-dependencies/ ./ COPY --from=builder spring-boot-loader/ ./ COPY --from=builder application/ ./ - -HEALTHCHECK \ ---interval=10s \ ---timeout=5s \ ---start-period=30s \ ---retries=5 \ -CMD curl -f -s -o /dev/null localhost:8081/actuator/health || exit 1 - -CMD exec env USER_ID="$(id -u)" USER_GID="$(id -g)" java $JAVA_OPTS $JAVA_TOOL_OPTS org.springframework.boot.loader.JarLauncher diff --git a/src/apps/geoserver/gwc/pom.xml b/src/apps/geoserver/gwc/pom.xml index 166ca8330..c71675120 100644 --- a/src/apps/geoserver/gwc/pom.xml +++ b/src/apps/geoserver/gwc/pom.xml @@ -15,18 +15,6 @@ org.geoserver.cloud.gwc.app.GeoWebCacheApplication - - org.geoserver.cloud - gs-cloud-spring-boot-starter - - - org.geoserver.cloud - gs-cloud-starter-webmvc - - - org.geoserver.cloud - gs-cloud-starter-security - org.geoserver.cloud gwc-cloud-spring-boot-starter @@ -117,6 +105,9 @@ com.spotify dockerfile-maven-plugin + + false + diff --git a/src/apps/geoserver/gwc/src/main/java/org/geoserver/cloud/gwc/app/GeoWebCacheApplication.java b/src/apps/geoserver/gwc/src/main/java/org/geoserver/cloud/gwc/app/GeoWebCacheApplication.java index 6d124de43..3d94a1886 100644 --- a/src/apps/geoserver/gwc/src/main/java/org/geoserver/cloud/gwc/app/GeoWebCacheApplication.java +++ b/src/apps/geoserver/gwc/src/main/java/org/geoserver/cloud/gwc/app/GeoWebCacheApplication.java @@ -4,6 +4,7 @@ */ package org.geoserver.cloud.gwc.app; +import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -14,7 +15,12 @@ public static void main(String[] args) { try { SpringApplication.run(GeoWebCacheApplication.class, args); } catch (RuntimeException e) { - System.exit(-1); + try { + LoggerFactory.getLogger(GeoWebCacheApplication.class) + .error("Application run failed", e); + } finally { + System.exit(-1); + } } } } diff --git a/src/apps/geoserver/pom.xml b/src/apps/geoserver/pom.xml index 837bf79df..54036365f 100644 --- a/src/apps/geoserver/pom.xml +++ b/src/apps/geoserver/pom.xml @@ -29,9 +29,28 @@ pom import + + org.geoserver.cloud + gs-cloud-webmvc-common-docker-layers + ${project.version} + provided + true + + + org.geoserver.cloud + gs-cloud-spring-factory + + + org.geoserver.cloud + gs-cloud-starter-webmvc + + + org.geoserver.cloud + gs-cloud-starter-security + org.geoserver.cloud spring-boot-simplejndi diff --git a/src/apps/geoserver/restconfig/Dockerfile b/src/apps/geoserver/restconfig/Dockerfile index 4574b0981..0d942b6ba 100644 --- a/src/apps/geoserver/restconfig/Dockerfile +++ b/src/apps/geoserver/restconfig/Dockerfile @@ -1,55 +1,18 @@ -FROM eclipse-temurin:17-jre as builder -ARG JAR_FILE=target/gs-cloud-*-bin.jar +ARG TAG=latest +FROM geoservercloud/gs-cloud-base-jre:$TAG as builder -RUN apt update && \ -apt install -y fonts-deva \ -fonts-font-awesome \ -fonts-freefont-ttf \ -fonts-material-design-icons-iconfont \ -fonts-materialdesignicons-webfont \ -fonts-roboto +ARG JAR_FILE=target/gs-cloud-*-bin.jar COPY ${JAR_FILE} application.jar RUN java -Djarmode=layertools -jar application.jar extract ########## -FROM eclipse-temurin:17-jre -COPY target/config/ /etc/gscloud/ - -LABEL maintainer="GeoServer PSC " - -COPY --from=builder /usr/share/fonts/truetype/* /usr/share/fonts/truetype/ +FROM geoservercloud/gs-cloud-base-geoserver-image:$TAG -RUN mkdir -p /opt/app/bin -RUN mkdir -p /opt/app/data_directory && chmod 0777 /opt/app/data_directory -VOLUME /opt/app/data_directory - -WORKDIR /opt/app/bin -ENV JAVA_TOOL_OPTS="\ ---add-exports=java.desktop/sun.awt.image=ALL-UNNAMED \ ---add-opens=java.base/java.lang=ALL-UNNAMED \ ---add-opens=java.base/java.util=ALL-UNNAMED \ ---add-opens=java.base/java.lang.reflect=ALL-UNNAMED \ ---add-opens=java.base/java.text=ALL-UNNAMED \ ---add-opens=java.desktop/java.awt.font=ALL-UNNAMED \ ---add-opens=java.desktop/sun.awt.image=ALL-UNNAMED \ ---add-opens=java.naming/com.sun.jndi.ldap=ALL-UNNAMED \ --Djava.awt.headless=true" -ENV JAVA_OPTS= -EXPOSE 8080 -EXPOSE 8081 +# WORKDIR already set to /opt/app/bin COPY --from=builder dependencies/ ./ COPY --from=builder snapshot-dependencies/ ./ COPY --from=builder spring-boot-loader/ ./ COPY --from=builder application/ ./ - -HEALTHCHECK \ ---interval=10s \ ---timeout=5s \ ---start-period=30s \ ---retries=5 \ -CMD curl -f -s -o /dev/null localhost:8081/actuator/health || exit 1 - -CMD exec env USER_ID="$(id -u)" USER_GID="$(id -g)" java $JAVA_OPTS $JAVA_TOOL_OPTS org.springframework.boot.loader.JarLauncher diff --git a/src/apps/geoserver/restconfig/pom.xml b/src/apps/geoserver/restconfig/pom.xml index 654ebbec0..5a283b115 100644 --- a/src/apps/geoserver/restconfig/pom.xml +++ b/src/apps/geoserver/restconfig/pom.xml @@ -15,14 +15,6 @@ org.geoserver.cloud.restconfig.RestConfigApplication - - org.geoserver.cloud - gs-cloud-starter-webmvc - - - org.geoserver.cloud - gs-cloud-starter-security - org.geoserver.cloud gs-cloud-starter-vector-formats @@ -96,6 +88,9 @@ com.spotify dockerfile-maven-plugin + + false + diff --git a/src/apps/geoserver/wcs/Dockerfile b/src/apps/geoserver/wcs/Dockerfile index 5f36627eb..0d942b6ba 100644 --- a/src/apps/geoserver/wcs/Dockerfile +++ b/src/apps/geoserver/wcs/Dockerfile @@ -1,4 +1,6 @@ -FROM eclipse-temurin:17-jre as builder +ARG TAG=latest +FROM geoservercloud/gs-cloud-base-jre:$TAG as builder + ARG JAR_FILE=target/gs-cloud-*-bin.jar COPY ${JAR_FILE} application.jar @@ -6,40 +8,11 @@ COPY ${JAR_FILE} application.jar RUN java -Djarmode=layertools -jar application.jar extract ########## -FROM eclipse-temurin:17-jre -COPY target/config/ /etc/gscloud/ - -LABEL maintainer="GeoServer PSC " - -RUN mkdir -p /opt/app/bin -RUN mkdir -p /opt/app/data_directory && chmod 0777 /opt/app/data_directory -VOLUME /opt/app/data_directory +FROM geoservercloud/gs-cloud-base-geoserver-image:$TAG -WORKDIR /opt/app/bin -ENV JAVA_TOOL_OPTS="\ ---add-exports=java.desktop/sun.awt.image=ALL-UNNAMED \ ---add-opens=java.base/java.lang=ALL-UNNAMED \ ---add-opens=java.base/java.util=ALL-UNNAMED \ ---add-opens=java.base/java.lang.reflect=ALL-UNNAMED \ ---add-opens=java.base/java.text=ALL-UNNAMED \ ---add-opens=java.desktop/java.awt.font=ALL-UNNAMED \ ---add-opens=java.desktop/sun.awt.image=ALL-UNNAMED \ ---add-opens=java.naming/com.sun.jndi.ldap=ALL-UNNAMED \ --Djava.awt.headless=true" -ENV JAVA_OPTS= -EXPOSE 8080 -EXPOSE 8081 +# WORKDIR already set to /opt/app/bin COPY --from=builder dependencies/ ./ COPY --from=builder snapshot-dependencies/ ./ COPY --from=builder spring-boot-loader/ ./ COPY --from=builder application/ ./ - -HEALTHCHECK \ ---interval=10s \ ---timeout=5s \ ---start-period=30s \ ---retries=5 \ -CMD curl -f -s -o /dev/null localhost:8081/actuator/health || exit 1 - -CMD exec env USER_ID="$(id -u)" USER_GID="$(id -g)" java $JAVA_OPTS $JAVA_TOOL_OPTS org.springframework.boot.loader.JarLauncher diff --git a/src/apps/geoserver/wcs/pom.xml b/src/apps/geoserver/wcs/pom.xml index d6b234932..9e3e44d26 100644 --- a/src/apps/geoserver/wcs/pom.xml +++ b/src/apps/geoserver/wcs/pom.xml @@ -15,18 +15,6 @@ org.geoserver.cloud.wcs.WcsApplication - - org.geoserver.cloud - gs-cloud-spring-factory - - - org.geoserver.cloud - gs-cloud-starter-webmvc - - - org.geoserver.cloud - gs-cloud-starter-security - org.geoserver.cloud gs-cloud-starter-raster-formats @@ -88,6 +76,9 @@ com.spotify dockerfile-maven-plugin + + false + diff --git a/src/apps/geoserver/webui/Dockerfile b/src/apps/geoserver/webui/Dockerfile index 3f21a76b9..0d942b6ba 100644 --- a/src/apps/geoserver/webui/Dockerfile +++ b/src/apps/geoserver/webui/Dockerfile @@ -1,60 +1,18 @@ -FROM eclipse-temurin:17-jre as builder -ARG JAR_FILE=target/gs-cloud-*-bin.jar +ARG TAG=latest +FROM geoservercloud/gs-cloud-base-jre:$TAG as builder -RUN apt update && \ -apt install -y fonts-deva \ -fonts-font-awesome \ -fonts-freefont-ttf \ -fonts-material-design-icons-iconfont \ -fonts-materialdesignicons-webfont \ -fonts-roboto +ARG JAR_FILE=target/gs-cloud-*-bin.jar COPY ${JAR_FILE} application.jar RUN java -Djarmode=layertools -jar application.jar extract ########## -FROM eclipse-temurin:17-jre -COPY target/config/ /etc/gscloud/ - -LABEL maintainer="GeoServer PSC " - -COPY --from=builder /usr/share/fonts/truetype/* /usr/share/fonts/truetype/ +FROM geoservercloud/gs-cloud-base-geoserver-image:$TAG -# REVISIT: ideally webui shouldn't even have access to the geowebcache -# directory, but since it needs to run a lot of gwc and gwc-gs integration -# services, it might still need it. -RUN mkdir -p /opt/app/bin /opt/app/data_directory /data/geowebcache -RUN chmod 0777 /opt/app/data_directory /data/geowebcache - -VOLUME /opt/app/data_directory -VOLUME /data/geowebcache - -WORKDIR /opt/app/bin -ENV JAVA_TOOL_OPTS="\ ---add-exports=java.desktop/sun.awt.image=ALL-UNNAMED \ ---add-opens=java.base/java.lang=ALL-UNNAMED \ ---add-opens=java.base/java.util=ALL-UNNAMED \ ---add-opens=java.base/java.lang.reflect=ALL-UNNAMED \ ---add-opens=java.base/java.text=ALL-UNNAMED \ ---add-opens=java.desktop/java.awt.font=ALL-UNNAMED \ ---add-opens=java.desktop/sun.awt.image=ALL-UNNAMED \ ---add-opens=java.naming/com.sun.jndi.ldap=ALL-UNNAMED \ --Djava.awt.headless=true" -ENV JAVA_OPTS= -EXPOSE 8080 -EXPOSE 8081 +# WORKDIR already set to /opt/app/bin COPY --from=builder dependencies/ ./ COPY --from=builder snapshot-dependencies/ ./ COPY --from=builder spring-boot-loader/ ./ COPY --from=builder application/ ./ - -HEALTHCHECK \ ---interval=10s \ ---timeout=5s \ ---start-period=30s \ ---retries=5 \ -CMD curl -f -s -o /dev/null localhost:8081/actuator/health || exit 1 - -CMD exec env USER_ID="$(id -u)" USER_GID="$(id -g)" java $JAVA_OPTS $JAVA_TOOL_OPTS org.springframework.boot.loader.JarLauncher diff --git a/src/apps/geoserver/webui/pom.xml b/src/apps/geoserver/webui/pom.xml index bd6a6a44f..9f57c0db4 100644 --- a/src/apps/geoserver/webui/pom.xml +++ b/src/apps/geoserver/webui/pom.xml @@ -15,18 +15,6 @@ org.geoserver.cloud.web.app.WebUIApplication - - org.geoserver.cloud - gs-cloud-spring-factory - - - org.geoserver.cloud - gs-cloud-starter-webmvc - - - org.geoserver.cloud - gs-cloud-starter-security - org.geoserver.cloud gs-cloud-starter-wms-extensions @@ -199,6 +187,9 @@ com.spotify dockerfile-maven-plugin + + false + diff --git a/src/apps/geoserver/wfs/Dockerfile b/src/apps/geoserver/wfs/Dockerfile index 2263025f3..0d942b6ba 100644 --- a/src/apps/geoserver/wfs/Dockerfile +++ b/src/apps/geoserver/wfs/Dockerfile @@ -1,4 +1,6 @@ -FROM eclipse-temurin:17-jre as builder +ARG TAG=latest +FROM geoservercloud/gs-cloud-base-jre:$TAG as builder + ARG JAR_FILE=target/gs-cloud-*-bin.jar COPY ${JAR_FILE} application.jar @@ -6,41 +8,11 @@ COPY ${JAR_FILE} application.jar RUN java -Djarmode=layertools -jar application.jar extract ########## -FROM eclipse-temurin:17-jre -COPY target/config/ /etc/gscloud/ - -LABEL maintainer="GeoServer PSC " - -RUN mkdir -p /opt/app/bin -RUN mkdir -p /opt/app/data_directory && chmod 0777 /opt/app/data_directory -VOLUME /opt/app/data_directory +FROM geoservercloud/gs-cloud-base-geoserver-image:$TAG -WORKDIR /opt/app/bin -ENV JAVA_TOOL_OPTS="\ ---add-exports=java.desktop/sun.awt.image=ALL-UNNAMED \ ---add-opens=java.base/java.lang=ALL-UNNAMED \ ---add-opens=java.base/java.util=ALL-UNNAMED \ ---add-opens=java.base/java.lang.reflect=ALL-UNNAMED \ ---add-opens=java.base/java.text=ALL-UNNAMED \ ---add-opens=java.desktop/java.awt.font=ALL-UNNAMED \ ---add-opens=java.desktop/sun.awt.image=ALL-UNNAMED \ ---add-opens=java.naming/com.sun.jndi.ldap=ALL-UNNAMED \ --Djava.awt.headless=true" -ENV JAVA_OPTS= - -EXPOSE 8080 -EXPOSE 8081 +# WORKDIR already set to /opt/app/bin COPY --from=builder dependencies/ ./ COPY --from=builder snapshot-dependencies/ ./ COPY --from=builder spring-boot-loader/ ./ COPY --from=builder application/ ./ - -HEALTHCHECK \ ---interval=10s \ ---timeout=5s \ ---start-period=30s \ ---retries=5 \ -CMD curl -f -s -o /dev/null localhost:8081/actuator/health || exit 1 - -CMD exec env USER_ID="$(id -u)" USER_GID="$(id -g)" java $JAVA_OPTS $JAVA_TOOL_OPTS org.springframework.boot.loader.JarLauncher diff --git a/src/apps/geoserver/wfs/pom.xml b/src/apps/geoserver/wfs/pom.xml index 05b16fbe0..87d3458da 100644 --- a/src/apps/geoserver/wfs/pom.xml +++ b/src/apps/geoserver/wfs/pom.xml @@ -15,18 +15,6 @@ org.geoserver.cloud.wfs.WfsApplication - - org.geoserver.cloud - gs-cloud-spring-factory - - - org.geoserver.cloud - gs-cloud-starter-webmvc - - - org.geoserver.cloud - gs-cloud-starter-security - org.geoserver.cloud gs-cloud-starter-vector-formats @@ -85,6 +73,9 @@ com.spotify dockerfile-maven-plugin + + false + diff --git a/src/apps/geoserver/wms/Dockerfile b/src/apps/geoserver/wms/Dockerfile index e17b46e35..0d942b6ba 100644 --- a/src/apps/geoserver/wms/Dockerfile +++ b/src/apps/geoserver/wms/Dockerfile @@ -1,56 +1,18 @@ -FROM eclipse-temurin:17-jre as builder -ARG JAR_FILE=target/gs-cloud-*-bin.jar +ARG TAG=latest +FROM geoservercloud/gs-cloud-base-jre:$TAG as builder -RUN apt update && \ -apt install -y fonts-deva \ -fonts-font-awesome \ -fonts-freefont-ttf \ -fonts-material-design-icons-iconfont \ -fonts-materialdesignicons-webfont \ -fonts-roboto +ARG JAR_FILE=target/gs-cloud-*-bin.jar COPY ${JAR_FILE} application.jar RUN java -Djarmode=layertools -jar application.jar extract ########## -FROM eclipse-temurin:17-jre -COPY target/config/ /etc/gscloud/ - -LABEL maintainer="GeoServer PSC " - -COPY --from=builder /usr/share/fonts/truetype/* /usr/share/fonts/truetype/ +FROM geoservercloud/gs-cloud-base-geoserver-image:$TAG -RUN mkdir -p /opt/app/bin -RUN mkdir -p /opt/app/data_directory && chmod 0777 /opt/app/data_directory -VOLUME /opt/app/data_directory - -WORKDIR /opt/app/bin -ENV JAVA_TOOL_OPTS="\ ---add-exports=java.desktop/sun.awt.image=ALL-UNNAMED \ ---add-opens=java.base/java.lang=ALL-UNNAMED \ ---add-opens=java.base/java.util=ALL-UNNAMED \ ---add-opens=java.base/java.lang.reflect=ALL-UNNAMED \ ---add-opens=java.base/java.text=ALL-UNNAMED \ ---add-opens=java.desktop/java.awt.font=ALL-UNNAMED \ ---add-opens=java.desktop/sun.awt.image=ALL-UNNAMED \ ---add-opens=java.naming/com.sun.jndi.ldap=ALL-UNNAMED \ --Djava.awt.headless=true" -ENV JAVA_OPTS= -EXPOSE 8080 -EXPOSE 8081 +# WORKDIR already set to /opt/app/bin COPY --from=builder dependencies/ ./ COPY --from=builder snapshot-dependencies/ ./ COPY --from=builder spring-boot-loader/ ./ COPY --from=builder application/ ./ - -HEALTHCHECK \ ---interval=10s \ ---timeout=5s \ ---start-period=30s \ ---retries=5 \ -CMD curl -f -s -o /dev/null localhost:8081/actuator/health || exit 1 - -CMD exec env USER_ID="$(id -u)" USER_GID="$(id -g)" java $JAVA_OPTS $JAVA_TOOL_OPTS org.springframework.boot.loader.JarLauncher - diff --git a/src/apps/geoserver/wms/pom.xml b/src/apps/geoserver/wms/pom.xml index 2f2a7201c..6af9b48b8 100644 --- a/src/apps/geoserver/wms/pom.xml +++ b/src/apps/geoserver/wms/pom.xml @@ -15,10 +15,6 @@ org.geoserver.cloud.wms.app.WmsApplication - - org.geoserver.cloud - gs-cloud-spring-factory - org.geoserver.cloud gs-cloud-starter-webmvc @@ -102,6 +98,9 @@ com.spotify dockerfile-maven-plugin + + false + diff --git a/src/apps/geoserver/wps/Dockerfile b/src/apps/geoserver/wps/Dockerfile index 5f36627eb..0d942b6ba 100644 --- a/src/apps/geoserver/wps/Dockerfile +++ b/src/apps/geoserver/wps/Dockerfile @@ -1,4 +1,6 @@ -FROM eclipse-temurin:17-jre as builder +ARG TAG=latest +FROM geoservercloud/gs-cloud-base-jre:$TAG as builder + ARG JAR_FILE=target/gs-cloud-*-bin.jar COPY ${JAR_FILE} application.jar @@ -6,40 +8,11 @@ COPY ${JAR_FILE} application.jar RUN java -Djarmode=layertools -jar application.jar extract ########## -FROM eclipse-temurin:17-jre -COPY target/config/ /etc/gscloud/ - -LABEL maintainer="GeoServer PSC " - -RUN mkdir -p /opt/app/bin -RUN mkdir -p /opt/app/data_directory && chmod 0777 /opt/app/data_directory -VOLUME /opt/app/data_directory +FROM geoservercloud/gs-cloud-base-geoserver-image:$TAG -WORKDIR /opt/app/bin -ENV JAVA_TOOL_OPTS="\ ---add-exports=java.desktop/sun.awt.image=ALL-UNNAMED \ ---add-opens=java.base/java.lang=ALL-UNNAMED \ ---add-opens=java.base/java.util=ALL-UNNAMED \ ---add-opens=java.base/java.lang.reflect=ALL-UNNAMED \ ---add-opens=java.base/java.text=ALL-UNNAMED \ ---add-opens=java.desktop/java.awt.font=ALL-UNNAMED \ ---add-opens=java.desktop/sun.awt.image=ALL-UNNAMED \ ---add-opens=java.naming/com.sun.jndi.ldap=ALL-UNNAMED \ --Djava.awt.headless=true" -ENV JAVA_OPTS= -EXPOSE 8080 -EXPOSE 8081 +# WORKDIR already set to /opt/app/bin COPY --from=builder dependencies/ ./ COPY --from=builder snapshot-dependencies/ ./ COPY --from=builder spring-boot-loader/ ./ COPY --from=builder application/ ./ - -HEALTHCHECK \ ---interval=10s \ ---timeout=5s \ ---start-period=30s \ ---retries=5 \ -CMD curl -f -s -o /dev/null localhost:8081/actuator/health || exit 1 - -CMD exec env USER_ID="$(id -u)" USER_GID="$(id -g)" java $JAVA_OPTS $JAVA_TOOL_OPTS org.springframework.boot.loader.JarLauncher diff --git a/src/apps/geoserver/wps/pom.xml b/src/apps/geoserver/wps/pom.xml index 479568f47..b9b86f160 100644 --- a/src/apps/geoserver/wps/pom.xml +++ b/src/apps/geoserver/wps/pom.xml @@ -15,18 +15,6 @@ org.geoserver.cloud.wps.WpsApplication - - org.geoserver.cloud - gs-cloud-spring-factory - - - org.geoserver.cloud - gs-cloud-starter-webmvc - - - org.geoserver.cloud - gs-cloud-starter-security - org.geoserver.cloud gs-cloud-starter-vector-formats diff --git a/src/apps/infrastructure/admin/Dockerfile b/src/apps/infrastructure/admin/Dockerfile index e3498f091..4dedd3991 100644 --- a/src/apps/infrastructure/admin/Dockerfile +++ b/src/apps/infrastructure/admin/Dockerfile @@ -1,4 +1,5 @@ -FROM eclipse-temurin:17-jre as builder +ARG TAG=latest +FROM geoservercloud/gs-cloud-base-jre:$TAG as builder ARG JAR_FILE=target/gs-cloud-*-bin.jar COPY ${JAR_FILE} application.jar @@ -6,15 +7,9 @@ COPY ${JAR_FILE} application.jar RUN java -Djarmode=layertools -jar application.jar extract ########## -FROM eclipse-temurin:17-jre +FROM geoservercloud/gs-cloud-base-spring-boot:$TAG -LABEL maintainer="GeoServer PSC " - -RUN mkdir -p /opt/app/bin - -WORKDIR /opt/app/bin -ENV JAVA_OPTS= -EXPOSE 8080 +# WORKDIR already set to /opt/app/bin COPY --from=builder dependencies/ ./ COPY --from=builder snapshot-dependencies/ ./ diff --git a/src/apps/infrastructure/admin/pom.xml b/src/apps/infrastructure/admin/pom.xml index 860c72290..5e7db28f5 100644 --- a/src/apps/infrastructure/admin/pom.xml +++ b/src/apps/infrastructure/admin/pom.xml @@ -67,6 +67,9 @@ com.spotify dockerfile-maven-plugin + + false + diff --git a/src/apps/infrastructure/config/Dockerfile b/src/apps/infrastructure/config/Dockerfile index a3a1c0b60..9fc6e3fcc 100644 --- a/src/apps/infrastructure/config/Dockerfile +++ b/src/apps/infrastructure/config/Dockerfile @@ -1,4 +1,5 @@ -FROM eclipse-temurin:17-jre as builder +ARG TAG=latest +FROM geoservercloud/gs-cloud-base-jre:$TAG as builder ARG JAR_FILE=target/gs-cloud-*-bin.jar COPY ${JAR_FILE} application.jar @@ -6,31 +7,15 @@ COPY ${JAR_FILE} application.jar RUN java -Djarmode=layertools -jar application.jar extract ########## -FROM eclipse-temurin:17-jre -COPY target/config/ /etc/gscloud/ +FROM geoservercloud/gs-cloud-base-spring-boot:$TAG -LABEL maintainer="GeoServer PSC " - -RUN mkdir -p /opt/app/bin - -# Where jgit will try to create a .config directory -ENV XDG_CONFIG_HOME=/tmp - -WORKDIR /opt/app/bin -ENV JAVA_OPTS= -EXPOSE 8080 -EXPOSE 8081 +# WORKDIR already set to /opt/app/bin COPY --from=builder dependencies/ ./ COPY --from=builder snapshot-dependencies/ ./ COPY --from=builder spring-boot-loader/ ./ COPY --from=builder application/ ./ -HEALTHCHECK \ ---interval=10s \ ---timeout=5s \ ---start-period=30s \ ---retries=5 \ -CMD curl -f -s -o /dev/null localhost:8081/actuator/health || exit 1 +# Where jgit will try to create a .config directory +ENV XDG_CONFIG_HOME=/tmp -CMD exec env USER_ID="$(id -u)" USER_GID="$(id -g)" java $JAVA_OPTS org.springframework.boot.loader.JarLauncher diff --git a/src/apps/infrastructure/config/pom.xml b/src/apps/infrastructure/config/pom.xml index 9e673844f..68472f08b 100644 --- a/src/apps/infrastructure/config/pom.xml +++ b/src/apps/infrastructure/config/pom.xml @@ -162,6 +162,9 @@ com.spotify dockerfile-maven-plugin + + false + diff --git a/src/apps/infrastructure/discovery/Dockerfile b/src/apps/infrastructure/discovery/Dockerfile index 88b62a199..b36ea2ed1 100644 --- a/src/apps/infrastructure/discovery/Dockerfile +++ b/src/apps/infrastructure/discovery/Dockerfile @@ -1,4 +1,5 @@ -FROM eclipse-temurin:17-jre as builder +ARG TAG=latest +FROM geoservercloud/gs-cloud-base-jre:$TAG as builder ARG JAR_FILE=target/gs-cloud-*-bin.jar COPY ${JAR_FILE} application.jar @@ -6,28 +7,11 @@ COPY ${JAR_FILE} application.jar RUN java -Djarmode=layertools -jar application.jar extract ########## -FROM eclipse-temurin:17-jre -COPY target/config/ /etc/gscloud/ +FROM geoservercloud/gs-cloud-base-spring-boot:$TAG -LABEL maintainer="GeoServer PSC " - -RUN mkdir -p /opt/app/bin - -WORKDIR /opt/app/bin -ENV JAVA_OPTS= -EXPOSE 8761 -EXPOSE 8081 +# WORKDIR already set to /opt/app/bin COPY --from=builder dependencies/ ./ COPY --from=builder snapshot-dependencies/ ./ COPY --from=builder spring-boot-loader/ ./ COPY --from=builder application/ ./ - -HEALTHCHECK \ ---interval=10s \ ---timeout=5s \ ---start-period=30s \ ---retries=5 \ -CMD curl -f -s -o /dev/null localhost:8081/actuator/health || exit 1 - -CMD exec env USER_ID="$(id -u)" USER_GID="$(id -g)" java $JAVA_OPTS org.springframework.boot.loader.JarLauncher diff --git a/src/apps/infrastructure/discovery/pom.xml b/src/apps/infrastructure/discovery/pom.xml index 4b44c94c9..07253c143 100644 --- a/src/apps/infrastructure/discovery/pom.xml +++ b/src/apps/infrastructure/discovery/pom.xml @@ -73,6 +73,9 @@ com.spotify dockerfile-maven-plugin + + false + diff --git a/src/apps/infrastructure/gateway/Dockerfile b/src/apps/infrastructure/gateway/Dockerfile index a7757ef04..b36ea2ed1 100644 --- a/src/apps/infrastructure/gateway/Dockerfile +++ b/src/apps/infrastructure/gateway/Dockerfile @@ -1,4 +1,5 @@ -FROM eclipse-temurin:17-jre as builder +ARG TAG=latest +FROM geoservercloud/gs-cloud-base-jre:$TAG as builder ARG JAR_FILE=target/gs-cloud-*-bin.jar COPY ${JAR_FILE} application.jar @@ -6,28 +7,11 @@ COPY ${JAR_FILE} application.jar RUN java -Djarmode=layertools -jar application.jar extract ########## -FROM eclipse-temurin:17-jre -COPY target/config/ /etc/gscloud/ +FROM geoservercloud/gs-cloud-base-spring-boot:$TAG -LABEL maintainer="GeoServer PSC " - -RUN mkdir -p /opt/app/bin - -WORKDIR /opt/app/bin -ENV JAVA_OPTS= -EXPOSE 8080 -EXPOSE 8081 +# WORKDIR already set to /opt/app/bin COPY --from=builder dependencies/ ./ COPY --from=builder snapshot-dependencies/ ./ COPY --from=builder spring-boot-loader/ ./ COPY --from=builder application/ ./ - -HEALTHCHECK \ ---interval=10s \ ---timeout=5s \ ---start-period=30s \ ---retries=5 \ -CMD curl -f -s -o /dev/null localhost:8081/actuator/health || exit 1 - -CMD exec env USER_ID="$(id -u)" USER_GID="$(id -g)" java $JAVA_OPTS org.springframework.boot.loader.JarLauncher diff --git a/src/apps/infrastructure/gateway/pom.xml b/src/apps/infrastructure/gateway/pom.xml index 607d4602d..e0c91735f 100644 --- a/src/apps/infrastructure/gateway/pom.xml +++ b/src/apps/infrastructure/gateway/pom.xml @@ -95,6 +95,9 @@ com.spotify dockerfile-maven-plugin + + false + diff --git a/src/apps/pom.xml b/src/apps/pom.xml index c6a4bdf68..46375ace6 100644 --- a/src/apps/pom.xml +++ b/src/apps/pom.xml @@ -11,6 +11,7 @@ pom Applications + base-images infrastructure geoserver