Add MaridDB java client into runtimes (#2111)
And remove dedicated mysql image - as the driver is available into the default one Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
This commit is contained in:
@@ -18,7 +18,7 @@ services:
|
||||
# HawkBit DDI
|
||||
# ---------------------
|
||||
hawkbit-ddi:
|
||||
image: "hawkbit/hawkbit-ddi-server:latest-mysql"
|
||||
image: "hawkbit/hawkbit-ddi-server:latest"
|
||||
environment:
|
||||
- 'PROFILES=mysql'
|
||||
- 'SPRING_DATASOURCE_URL=jdbc:mariadb://mysql:3306/hawkbit'
|
||||
@@ -39,7 +39,7 @@ services:
|
||||
# HawkBit DMF
|
||||
# ---------------------
|
||||
hawkbit-dmf:
|
||||
image: "hawkbit/hawkbit-dmf-server:latest-mysql"
|
||||
image: "hawkbit/hawkbit-dmf-server:latest"
|
||||
environment:
|
||||
- 'PROFILES=mysql'
|
||||
- 'SPRING_DATASOURCE_URL=jdbc:mariadb://mysql:3306/hawkbit'
|
||||
@@ -58,7 +58,7 @@ services:
|
||||
# HawkBit MGMT
|
||||
# ---------------------
|
||||
hawkbit-mgmt:
|
||||
image: "hawkbit/hawkbit-mgmt-server:latest-mysql"
|
||||
image: "hawkbit/hawkbit-mgmt-server:latest"
|
||||
environment:
|
||||
- 'PROFILES=mysql'
|
||||
- 'SPRING_DATASOURCE_URL=jdbc:mariadb://mysql:3306/hawkbit'
|
||||
|
||||
@@ -18,7 +18,7 @@ services:
|
||||
# HawkBit Simple UI
|
||||
# ---------------------
|
||||
hawkbit-simple-ui:
|
||||
image: "hawkbit/hawkbit-simple-ui:latest-mysql"
|
||||
image: "hawkbit/hawkbit-simple-ui:latest"
|
||||
environment:
|
||||
- 'SPRING_APPLICATION_JSON={"hawkbit.server.mgmtUrl": "http://hawkbit-mgmt:8080"}'
|
||||
restart: always
|
||||
|
||||
@@ -18,7 +18,7 @@ services:
|
||||
# HawkBit service
|
||||
# ---------------------
|
||||
hawkbit:
|
||||
image: "hawkbit/hawkbit-update-server:latest-mysql"
|
||||
image: "hawkbit/hawkbit-update-server:latest"
|
||||
environment:
|
||||
- 'PROFILES=mysql'
|
||||
- 'SPRING_DATASOURCE_URL=jdbc:mariadb://mysql:3306/hawkbit'
|
||||
|
||||
@@ -18,7 +18,7 @@ services:
|
||||
# HawkBit Simple UI service
|
||||
# ---------------------
|
||||
hawkbit-simple-ui:
|
||||
image: "hawkbit/hawkbit-simple-ui:latest-mysql"
|
||||
image: "hawkbit/hawkbit-simple-ui:latest"
|
||||
environment:
|
||||
- 'SPRING_APPLICATION_JSON={"hawkbit.server.mgmtUrl": "http://hawkbit:8080"}'
|
||||
restart: always
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
# set Java
|
||||
ARG JAVA_VERSION=17.0.13_11
|
||||
# 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=pass_as_buils_arg
|
||||
|
||||
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 &&\
|
||||
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 &&\
|
||||
rm /${APP}.jar.asc /KEY &&\
|
||||
mkdir -p ${BUILD_DIR} &&\
|
||||
cd ${BUILD_DIR} &&\
|
||||
java -Djarmode=tools -jar /${APP}.jar extract --layers --launcher --destination . &&\
|
||||
rm /${APP}.jar
|
||||
|
||||
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 hawkbit_group && adduser -D hawkbit -G hawkbit_group
|
||||
RUN mkdir -p /artifactrepo && chown -R hawkbit /artifactrepo
|
||||
USER hawkbit
|
||||
|
||||
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/
|
||||
|
||||
VOLUME "/artifactrepo"
|
||||
|
||||
ARG CONTAINER_PORT=8080
|
||||
EXPOSE ${CONTAINER_PORT}
|
||||
|
||||
ARG PROFILES=mysql
|
||||
ENV PROFILES=${PROFILES}
|
||||
ARG X_MS=768m
|
||||
ENV X_MS=${X_MS}
|
||||
ARG X_MX=768m
|
||||
ENV X_MX=${X_MX}
|
||||
ARG XX_MAX_METASPACE_SIZE=250m
|
||||
ENV XX_MAX_METASPACE_SIZE=${XX_MAX_METASPACE_SIZE}
|
||||
ARG XX_METASPACE_SIZE=250m
|
||||
ENV XX_METASPACE_SIZE=${XX_METASPACE_SIZE}
|
||||
ARG XSS=300K
|
||||
ENV XSS=${XSS}
|
||||
ARG GC=G1
|
||||
ENV GC=${GC}
|
||||
|
||||
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -Dspring.profiles.active=${PROFILES} -Xms${X_MS} -Xmx${X_MX} -XX:MaxMetaspaceSize=${XX_MAX_METASPACE_SIZE} -XX:MetaspaceSize=${XX_METASPACE_SIZE} -Xss${XSS} -XX:+Use${GC}GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError org.springframework.boot.loader.launch.JarLauncher ${@}"]
|
||||
@@ -1,56 +0,0 @@
|
||||
# set Java
|
||||
ARG JAVA_VERSION=17.0.13_11
|
||||
# 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-SNAPSHOT
|
||||
|
||||
ENV BUILD_DIR=/opt/hawkbit_build
|
||||
ENV APP=${HAWKBIT_APP}
|
||||
ENV VERSION=${HAWKBIT_VERSION}
|
||||
|
||||
COPY org/eclipse/hawkbit/${APP}/${VERSION}/${APP}-${VERSION}.jar ${APP}-${VERSION}.jar
|
||||
|
||||
RUN set -x &&\
|
||||
mkdir -p ${BUILD_DIR} &&\
|
||||
cd ${BUILD_DIR} &&\
|
||||
java -Djarmode=tools -jar /${APP}-${VERSION}.jar extract --layers --launcher --destination . &&\
|
||||
rm /${APP}-${VERSION}.jar
|
||||
|
||||
FROM eclipse-temurin:${JAVA_VERSION}-jre-alpine
|
||||
|
||||
RUN addgroup -S hawkbit_group && adduser -D hawkbit -G hawkbit_group
|
||||
RUN mkdir -p /artifactrepo && chown -R hawkbit /artifactrepo
|
||||
USER hawkbit
|
||||
|
||||
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 org/mariadb/jdbc/mariadb-java-client/${MARIADB_DRIVER_VERSION}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar ./BOOT-INF/lib/
|
||||
|
||||
VOLUME "/artifactrepo"
|
||||
|
||||
ARG CONTAINER_PORT=8080
|
||||
EXPOSE ${CONTAINER_PORT}
|
||||
|
||||
ARG PROFILES=mysql
|
||||
ENV PROFILES=${PROFILES}
|
||||
ARG X_MS=768m
|
||||
ENV X_MS=${X_MS}
|
||||
ARG X_MX=768m
|
||||
ENV X_MX=${X_MX}
|
||||
ARG XX_MAX_METASPACE_SIZE=250m
|
||||
ENV XX_MAX_METASPACE_SIZE=${XX_MAX_METASPACE_SIZE}
|
||||
ARG XX_METASPACE_SIZE=250m
|
||||
ENV XX_METASPACE_SIZE=${XX_METASPACE_SIZE}
|
||||
ARG XSS=300K
|
||||
ENV XSS=${XSS}
|
||||
ARG GC=G1
|
||||
ENV GC=${GC}
|
||||
|
||||
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -Dspring.profiles.active=${PROFILES} -Xms${X_MS} -Xmx${X_MX} -XX:MaxMetaspaceSize=${XX_MAX_METASPACE_SIZE} -XX:MetaspaceSize=${XX_METASPACE_SIZE} -Xss${XSS} -XX:+Use${GC}GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError org.springframework.boot.loader.launch.JarLauncher ${@}"]
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: SKS 1.1.6
|
||||
Comment: Hostname: pgp.mit.edu
|
||||
|
||||
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
|
||||
FsnHsQksxFhCqGYdUKyfRsobs/Ns
|
||||
=ovQp
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -1,14 +1,6 @@
|
||||
hawkBit Docker Build
|
||||
===
|
||||
This directory contains docker files for building both hawkBit docker flavours:
|
||||
|
||||
* _standard_ - hawkBit images without mysql driver
|
||||
* _mysql_ - with MariaDB Java connector with support for MySQL.
|
||||
|
||||
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.
|
||||
|
||||
For every flavour there are two build types:
|
||||
This directory contains docker files for building hawkBit docker with two build types:
|
||||
|
||||
* _release_ - uses officially released hawkBit versions, downloading them from https://repo1.maven.org
|
||||
* _development/dev_ - uses the local maven repository with built by developer (or just downloaded from any maven
|
||||
@@ -26,14 +18,12 @@ Building images supports the following build arguments (i.e. ARG-s which could b
|
||||
* _HAWKBIT_VERSION_ - **[OPTIONAL, if not set a default, should be the last officially released version, is used]** the
|
||||
application version
|
||||
* _CONTAINER_PORT_ - **[OPTIONAL, if not set 8080 is used]** on which the app opens the http server (if available)
|
||||
* _MARIADB_DRIVER_VERSION_ (mysql flavours only!) - **[OPTIONAL, if not set a default is used]** the version of MariaDB
|
||||
connector to be used
|
||||
|
||||
Additionally, tge _development_ builds shall be started with docker build context the local maven repository
|
||||
|
||||
## Build standard
|
||||
## Build docker images
|
||||
|
||||
Standard flavour could be build, for example, with (fixed version 0.4.1 is just an example):
|
||||
Docker image could be build, for example, with (fixed version 0.4.1 is just an example):
|
||||
|
||||
```shell
|
||||
docker build --build-arg HAWKBIT_APP=hawkbit-update-server --build-arg HAWKBIT_VERSION=0.4.1 -t hawkbit_update_server:0.4.1 . -f Dockerfile
|
||||
@@ -52,31 +42,5 @@ To build standard development docker images, e.g. snapshot based, you could use
|
||||
```shell
|
||||
docker build -t hawkbit_update_server:0-SNAPSHOT -f Dockerfile_dev ~/.m2/repository
|
||||
```
|
||||
|
||||
Note that here you have to use your maven repository containing the hawkBit app as docker build context, in the example
|
||||
case _~/.m2/repository_
|
||||
|
||||
## Build mysql
|
||||
|
||||
Mysql flavour could be build, for example, with:
|
||||
|
||||
```shell
|
||||
docker build --build-arg HAWKBIT_APP=hawkbit-update-server --build-arg HAWKBIT_VERSION=0.4.1 -t hawkbit_update_server:0.4.1-mysql . -f Dockerfile-mysql
|
||||
```
|
||||
|
||||
or just by:
|
||||
|
||||
```shell
|
||||
docker build --build-arg -t hawkbit_update_server:0.4.1-mysql --build-arg HAWKBIT_VERSION=0.4.1 . -f Dockerfile-mysql
|
||||
```
|
||||
|
||||
having that the _hawkbit-update-server_ is the default _HAWKBIT_APP_.
|
||||
|
||||
To build development mysql docker images, e.g. snapshot based, you could use something like:
|
||||
|
||||
```shell
|
||||
docker build -t hawkbit_update_server:0-SNAPSHOT-mysql -f Dockerfile_dev-mysql ~/.m2/repository
|
||||
```
|
||||
|
||||
Note that here you have to use your maven repository containing the hawkBit app as docker build context, in the example
|
||||
case _~/.m2/repository_
|
||||
@@ -16,7 +16,6 @@ set -xe
|
||||
# -r <local maven repository> the local maven repository the already built application jars are located into
|
||||
|
||||
VERSION=0-SNAPSHOT
|
||||
FLAVOUR="standard"
|
||||
MVN_REPO=~/.m2/repository
|
||||
|
||||
while getopts v:f:r: option
|
||||
@@ -24,33 +23,24 @@ do
|
||||
case "${option}"
|
||||
in
|
||||
v)VERSION=${OPTARG};;
|
||||
f)FLAVOUR=${OPTARG};;
|
||||
r)MVN_REPO=${OPTARG};;
|
||||
esac
|
||||
done
|
||||
|
||||
echo "hawkBit version : ${VERSION}"
|
||||
echo "docker image flavour : ${FLAVOUR}"
|
||||
echo "maven repository : ${MVN_REPO}"
|
||||
|
||||
if [ ${FLAVOUR} == "mysql" ]
|
||||
then
|
||||
DOCKER_FILE="Dockerfile_dev-mysql"
|
||||
TAG_SUFFIX="-mysql"
|
||||
else
|
||||
DOCKER_FILE="Dockerfile_dev"
|
||||
TAG_SUFFIX=""
|
||||
fi
|
||||
|
||||
DOCKER_FILE="Dockerfile_dev"
|
||||
echo "docker file : ${DOCKER_FILE}"
|
||||
|
||||
function build() {
|
||||
docker build -t hawkbit/$1:${VERSION}${TAG_SUFFIX} -t hawkbit/$1:latest${TAG_SUFFIX} --build-arg HAWKBIT_APP=$1 --build-arg HAWKBIT_VERSION=${VERSION} -f ${DOCKER_FILE} "${MVN_REPO}"
|
||||
docker build -t hawkbit/$1:${VERSION} -t hawkbit/$1:latest --build-arg HAWKBIT_APP=$1 --build-arg HAWKBIT_VERSION=${VERSION} -f ${DOCKER_FILE} "${MVN_REPO}"
|
||||
}
|
||||
|
||||
# micro-services
|
||||
build "hawkbit-ddi-server"
|
||||
build "hawkbit-dmf-server"
|
||||
build "hawkbit-mgmt-server"
|
||||
build "hawkbit-simple-ui"
|
||||
|
||||
# monolith
|
||||
build "hawkbit-update-server"
|
||||
|
||||
Reference in New Issue
Block a user