Improved Docker build and docker images (#1488)
* Using upacked Spring layers for faster boot * Added option to pass JAVA_OPT to modify the environment variables in both flavours * Build support for different hawkbit apps - could be used in future if hawkBit is split in multiple micro-services * Removed templates and replacing with parameterized (via build ARGs) docker builds Signed-off-by: Marinov Avgustin <Avgustin.Marinov@bosch.com>
This commit is contained in:
@@ -21,4 +21,4 @@ fi
|
||||
|
||||
mvn clean install -DskipTests -Ddash.skip=false \
|
||||
--projects '!org.eclipse.hawkbit:hawkbit-repository-test,!org.eclipse.hawkbit:hawkbit-dmf-rabbitmq-test' \
|
||||
-Ddash.summary=${DASH_SUMMARY} ${DASH_IP_LAB}
|
||||
-Ddash.summary=${DASH_SUMMARY} ${DASH_IP_LAB}
|
||||
@@ -1,2 +0,0 @@
|
||||
Dockerfile
|
||||
Dockerfile-mysql
|
||||
42
hawkbit-runtime/docker/dockerfiles/Dockerfile
Normal file
42
hawkbit-runtime/docker/dockerfiles/Dockerfile
Normal file
@@ -0,0 +1,42 @@
|
||||
# set Java
|
||||
ARG JAVA_VERSION=17.0.9_9
|
||||
# extracts spring layers from the app jar (to optimize boot)
|
||||
FROM eclipse-temurin:${JAVA_VERSION}-jre-alpine as build
|
||||
|
||||
ARG HAWKBIT_APP=hawkbit-update-server
|
||||
ARG HAWKBIT_VERSION=0.3.0
|
||||
|
||||
ENV BUILD_DIR=/opt/hawkbit_build
|
||||
ENV APP=${HAWKBIT_APP}
|
||||
ENV VERSION=${HAWKBIT_VERSION}
|
||||
|
||||
COPY KEY .
|
||||
|
||||
RUN set -x &&\
|
||||
apk add --no-cache --virtual build-dependencies gnupg unzip libressl wget &&\
|
||||
gpg --import KEY &&\
|
||||
mkdir -p ${BUILD_DIR} &&\
|
||||
cd ${BUILD_DIR} &&\
|
||||
wget -O ${APP}.jar --no-verbose https://repo1.maven.org/maven2/org/eclipse/hawkbit/${APP}/${VERSION}/${APP}-${VERSION}.jar &&\
|
||||
wget -O ${APP}.jar.asc --no-verbose https://repo1.maven.org/maven2/org/eclipse/hawkbit/${APP}/${VERSION}/${APP}-${VERSION}.jar.asc &&\
|
||||
gpg --batch --verify ${APP}.jar.asc ${APP}.jar &&\
|
||||
apk del build-dependencies &&\
|
||||
java -Djarmode=layertools -jar ${APP}.jar extract --destination . &&\
|
||||
rm ${APP}.jar ${APP}.jar.asc /KEY
|
||||
|
||||
FROM eclipse-temurin:${JAVA_VERSION}-jre-alpine
|
||||
|
||||
RUN addgroup -S rollouts && adduser -D sp -G rollouts
|
||||
USER sp
|
||||
|
||||
ENV BUILD_DIR=/opt/hawkbit_build
|
||||
COPY --from=build ${BUILD_DIR}/dependencies/ ./
|
||||
COPY --from=build ${BUILD_DIR}/spring-boot-loader/ ./
|
||||
COPY --from=build ${BUILD_DIR}/snapshot-dependencies/ ./
|
||||
COPY --from=build ${BUILD_DIR}/application/ ./
|
||||
|
||||
ARG CONTAINER_PORT=8080
|
||||
ENV JAVA_OPTS="-Xms768m -Xmx768m -XX:MaxMetaspaceSize=250m -XX:MetaspaceSize=250m -Xss300K -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError"
|
||||
|
||||
EXPOSE ${CONTAINER_PORT}
|
||||
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} org.springframework.boot.loader.JarLauncher ${@}"]
|
||||
54
hawkbit-runtime/docker/dockerfiles/Dockerfile-mysql
Normal file
54
hawkbit-runtime/docker/dockerfiles/Dockerfile-mysql
Normal file
@@ -0,0 +1,54 @@
|
||||
# set Java
|
||||
ARG JAVA_VERSION=17.0.9_9
|
||||
# extracts spring layers from the app jar (to optimize boot)
|
||||
FROM eclipse-temurin:${JAVA_VERSION}-jre-alpine as build
|
||||
|
||||
ARG HAWKBIT_APP=hawkbit-update-server
|
||||
ARG HAWKBIT_VERSION=0.3.0
|
||||
|
||||
ENV BUILD_DIR=/opt/hawkbit_build
|
||||
ENV APP=${HAWKBIT_APP}
|
||||
ENV VERSION=${HAWKBIT_VERSION}
|
||||
|
||||
COPY KEY .
|
||||
|
||||
RUN set -x &&\
|
||||
apk add --no-cache --virtual build-dependencies gnupg unzip libressl wget &&\
|
||||
gpg --import KEY &&\
|
||||
mkdir -p ${BUILD_DIR} &&\
|
||||
cd ${BUILD_DIR} &&\
|
||||
wget -O ${APP}.jar --no-verbose https://repo1.maven.org/maven2/org/eclipse/hawkbit/${APP}/${VERSION}/${APP}-${VERSION}.jar &&\
|
||||
wget -O ${APP}.jar.asc --no-verbose https://repo1.maven.org/maven2/org/eclipse/hawkbit/${APP}/${VERSION}/${APP}-${VERSION}.jar.asc &&\
|
||||
gpg --batch --verify ${APP}.jar.asc ${APP}.jar &&\
|
||||
java -Djarmode=layertools -jar ${APP}.jar extract --destination . &&\
|
||||
rm ${APP}.jar ${APP}.jar.asc /KEY
|
||||
|
||||
ARG MARIADB_DRIVER_VERSION=3.1.4
|
||||
COPY KEY-mysql .
|
||||
|
||||
RUN set -x &&\
|
||||
gpg --import KEY-mysql &&\
|
||||
wget -O ${BUILD_DIR}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar --no-verbose https://downloads.mariadb.com/Connectors/java/connector-java-${MARIADB_DRIVER_VERSION}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar &&\
|
||||
wget -O ${BUILD_DIR}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar.asc --no-verbose https://downloads.mariadb.com/Connectors/java/connector-java-${MARIADB_DRIVER_VERSION}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar.asc &&\
|
||||
gpg --verify --batch ${BUILD_DIR}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar.asc ${BUILD_DIR}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar &&\
|
||||
apk del build-dependencies &&\
|
||||
rm ${BUILD_DIR}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar.asc /KEY-mysql
|
||||
|
||||
FROM eclipse-temurin:${JAVA_VERSION}-jre-alpine
|
||||
|
||||
RUN addgroup -S rollouts && adduser -D sp -G rollouts
|
||||
USER sp
|
||||
|
||||
ENV BUILD_DIR=/opt/hawkbit_build
|
||||
COPY --from=build ${BUILD_DIR}/dependencies/ ./
|
||||
COPY --from=build ${BUILD_DIR}/spring-boot-loader/ ./
|
||||
COPY --from=build ${BUILD_DIR}/snapshot-dependencies/ ./
|
||||
COPY --from=build ${BUILD_DIR}/application/ ./
|
||||
ARG MARIADB_DRIVER_VERSION=3.1.4
|
||||
COPY --from=build ${BUILD_DIR}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar/ ./BOOT-INF/lib/
|
||||
|
||||
ARG CONTAINER_PORT=8080
|
||||
ENV JAVA_OPTS="-Dspring.profiles.active=mysql -Xms768m -Xmx768m -XX:MaxMetaspaceSize=250m -XX:MetaspaceSize=250m -Xss300K -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError"
|
||||
|
||||
EXPOSE ${CONTAINER_PORT}
|
||||
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} org.springframework.boot.loader.JarLauncher ${@}"]
|
||||
@@ -1,15 +0,0 @@
|
||||
FROM hawkbit/hawkbit-update-server:{{HAWKBIT_VERSION}}
|
||||
|
||||
ENV MARIADB_DRIVER_VERSION={{MARIADB_DRIVER_VERSION}}
|
||||
|
||||
COPY KEY-mysql .
|
||||
|
||||
RUN set -x \
|
||||
&& apk add --no-cache --virtual build-dependencies gnupg unzip libressl wget \
|
||||
&& gpg --import KEY-mysql \
|
||||
&& wget -O $HAWKBIT_HOME/mariadb-java-client.jar --no-verbose https://downloads.mariadb.com/Connectors/java/connector-java-$MARIADB_DRIVER_VERSION/mariadb-java-client-$MARIADB_DRIVER_VERSION.jar \
|
||||
&& wget -O $HAWKBIT_HOME/mariadb-java-client.jar.asc --no-verbose https://downloads.mariadb.com/Connectors/java/connector-java-$MARIADB_DRIVER_VERSION/mariadb-java-client-$MARIADB_DRIVER_VERSION.jar.asc \
|
||||
&& gpg --verify --batch $HAWKBIT_HOME/mariadb-java-client.jar.asc $HAWKBIT_HOME/mariadb-java-client.jar \
|
||||
&& apk del build-dependencies
|
||||
|
||||
ENTRYPOINT ["java","-cp","hawkbit-update-server.jar:mariadb-java-client.jar","-Dspring.profiles.active=mysql","-Xms768m","-Xmx768m","-XX:MaxMetaspaceSize=250m","-XX:MetaspaceSize=250m","-Xss300K","-XX:+UseG1GC","-XX:+UseStringDeduplication","-XX:+UseCompressedOops","-XX:+HeapDumpOnOutOfMemoryError","org.springframework.boot.loader.JarLauncher"]
|
||||
@@ -1,23 +0,0 @@
|
||||
FROM {{BASE_IMAGE}}
|
||||
|
||||
ENV HAWKBIT_VERSION={{HAWKBIT_VERSION}} \
|
||||
HAWKBIT_HOME=/opt/hawkbit
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
COPY KEY .
|
||||
|
||||
RUN set -x \
|
||||
&& apk add --no-cache --virtual build-dependencies gnupg unzip libressl wget \
|
||||
&& gpg --import KEY \
|
||||
&& mkdir -p $HAWKBIT_HOME \
|
||||
&& cd $HAWKBIT_HOME \
|
||||
&& wget -O hawkbit-update-server.jar --no-verbose https://repo1.maven.org/maven2/org/eclipse/hawkbit/hawkbit-update-server/$HAWKBIT_VERSION/hawkbit-update-server-$HAWKBIT_VERSION.jar \
|
||||
&& wget -O hawkbit-update-server.jar.asc --no-verbose https://repo1.maven.org/maven2/org/eclipse/hawkbit/hawkbit-update-server/$HAWKBIT_VERSION/hawkbit-update-server-$HAWKBIT_VERSION.jar.asc \
|
||||
&& gpg --batch --verify hawkbit-update-server.jar.asc hawkbit-update-server.jar \
|
||||
&& apk del build-dependencies
|
||||
|
||||
VOLUME "$HAWKBIT_HOME/artifactrepo"
|
||||
|
||||
WORKDIR $HAWKBIT_HOME
|
||||
ENTRYPOINT ["java","-jar","hawkbit-update-server.jar","-Xms768m -Xmx768m -XX:MaxMetaspaceSize=250m -XX:MetaspaceSize=250m -Xss300K -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError"]
|
||||
24
hawkbit-runtime/docker/dockerfiles/README.md
Normal file
24
hawkbit-runtime/docker/dockerfiles/README.md
Normal file
@@ -0,0 +1,24 @@
|
||||
hawkBit Docker
|
||||
===
|
||||
Build files for both hawkbit docker flavours - standard (no mysql driver) and mysql (with MariaDB Java connector with support for MySQL).
|
||||
|
||||
## Build overview
|
||||
Images are built using _Dockerfile_ or _Dockerfile-mysql_. They accept _ARG_ build parameters _JAVA_VERSION_, _HAWKBIT_APP_ (by default hawkbit-update-server), HAWKBIT_VERSION_ (by default the last released hawkBit version), _CONTAINER_PORT_ (by default 8080) on which the app opens the http server (if available) and (for mysql flavour only) _MARIADB_DRIVER_VERSION_ (by default 3.1.4 at the time of writing).
|
||||
Both flavours of are almost the same, just mysql has in addition a MariaDB Java connector and is started, by default, with mysql Spring profile.
|
||||
|
||||
## Build standard
|
||||
Standard flavour could be build, for example, with:
|
||||
```shell
|
||||
docker build --build-arg HAWKBIT_APP=hawkbit-update-server -t hawkbit_update_server:0.3.0 . -f Dockerfile
|
||||
```
|
||||
or just by:
|
||||
```shell
|
||||
docker build --build-arg HAWKBIT_APP=hawkbit-update-server -t hawkbit_update_server:0.3.0 .
|
||||
```
|
||||
having that docker uses by default _Dockerfile_.
|
||||
|
||||
## Build mysql
|
||||
Mysql flavour could be build, for example, with:
|
||||
```shell
|
||||
docker build --build-arg HAWKBIT_APP=hawkbit-update-server -t hawkbit_update_server:0.3.0-mysql . -f Dockerfile-mysql
|
||||
```
|
||||
@@ -1,26 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2018 Bosch Software Innovations GmbH and others
|
||||
#
|
||||
# This program and the accompanying materials are made
|
||||
# available under the terms of the Eclipse Public License 2.0
|
||||
# which is available at https://www.eclipse.org/legal/epl-2.0/
|
||||
#
|
||||
# SPDX-License-Identifier: EPL-2.0
|
||||
#
|
||||
|
||||
set -euxo pipefail
|
||||
|
||||
HAWKBIT_VERSION="0.3.0M9"
|
||||
MARIADB_DRIVER_VERSION="3.1.4"
|
||||
BASE_IMAGE="eclipse-temurin:17.0.9_9-jre-alpine"
|
||||
|
||||
##################################################
|
||||
|
||||
#
|
||||
# rm ./Dockerfile ./Dockerfile-mysql
|
||||
cp ./Dockerfile.template ./Dockerfile
|
||||
cp ./Dockerfile-mysql.template ./Dockerfile-mysql
|
||||
|
||||
sed -i '' -e "s/{{BASE_IMAGE}}/${BASE_IMAGE}/g; s/{{HAWKBIT_VERSION}}/$HAWKBIT_VERSION/g" ./Dockerfile
|
||||
sed -i '' -e "s/{{HAWKBIT_VERSION}}/$HAWKBIT_VERSION/g; s/{{MARIADB_DRIVER_VERSION}}/$MARIADB_DRIVER_VERSION/g" ./Dockerfile-mysql
|
||||
Reference in New Issue
Block a user