Skip to content

Commit

Permalink
Native image fully statically linked (#3459)
Browse files Browse the repository at this point in the history
Co-authored-by: Eric Wittmann <[email protected]>
  • Loading branch information
andreaTP and EricWittmann authored Jun 27, 2023
1 parent b7f74ad commit d8aa45d
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 1 deletion.
1 change: 1 addition & 0 deletions .github/workflows/release-images.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ jobs:
release-images:
if: github.repository_owner == 'Apicurio'
runs-on: ubuntu-20.04
timeout-minutes: 120
env:
RELEASE_TYPE: release
steps:
Expand Down
21 changes: 20 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,15 @@ build-mem-native-image:
@echo "------------------------------------------------------------------------"
docker build -f $(DOCKERFILE_LOCATION)/Dockerfile.native -t $(IMAGE_REPO)/apicurio/apicurio-registry-mem-native:$(IMAGE_TAG) app/

.PHONY: build-mem-native-scratch-image ## Builds native docker image from scratch for 'mem' storage variant. Variables available for override [IMAGE_REPO, IMAGE_TAG]
build-mem-native-scratch-image:
@echo "------------------------------------------------------------------------"
@echo " Building Image For In-Memory Storage Variant (using Native Executable)"
@echo " Repository: $(IMAGE_REPO)"
@echo " Tag: $(IMAGE_TAG)"
@echo "------------------------------------------------------------------------"
docker build -f $(DOCKERFILE_LOCATION)/Dockerfile.native-scratch -t $(IMAGE_REPO)/apicurio/apicurio-registry-mem-native-scratch:$(IMAGE_TAG) ./


.PHONY: push-mem-native-image ## Pushes native docker image for 'mem' storage variant. Variables available for override [IMAGE_REPO, IMAGE_TAG]
push-mem-native-image:
Expand Down Expand Up @@ -278,8 +287,18 @@ kafkasql-multiarch-images:
@echo "------------------------------------------------------------------------"
docker buildx build --push -f $(DOCKERFILE_LOCATION)/$(KAFKASQL_DOCKERFILE) -t $(IMAGE_REPO)/apicurio/apicurio-registry-kafkasql:$(IMAGE_TAG) --platform $(IMAGE_PLATFORMS) $(DOCKER_BUILD_WORKSPACE)

.PHONY: kafkasql-multiarch-images ## Builds and pushes multi-arch images for mem storage variant based on scratch. Variables available for override [MEM_SCRATCH_DOCKERFILE, IMAGE_REPO, IMAGE_TAG, DOCKER_BUILD_WORKSPACE]
kafkasql-multiarch-images:
@echo "------------------------------------------------------------------------"
@echo " Building Multi-arch Images For Mem Storage Variant on Scratch"
@echo " Supported Platforms: $(IMAGE_PLATFORMS)"
@echo " Repository: $(IMAGE_REPO)"
@echo " Tag: $(IMAGE_TAG)"
@echo "------------------------------------------------------------------------"
docker buildx build --push -f $(DOCKERFILE_LOCATION)/$(MEM_SCRATCH_DOCKERFILE) -t $(IMAGE_REPO)/apicurio/apicurio-registry-mem-native-scratch:$(IMAGE_TAG) --platform $(IMAGE_PLATFORMS) $(DOCKER_BUILD_WORKSPACE)

.PHONY: multiarch-registry-images ## Builds and pushes multi-arch registry images for all variants. Variables available for override [IMAGE_REPO, IMAGE_TAG]
multiarch-registry-images: mem-multiarch-images sql-multiarch-images mssql-multiarch-images kafkasql-multiarch-images
multiarch-registry-images: mem-multiarch-images sql-multiarch-images mssql-multiarch-images kafkasql-multiarch-images build-mem-native-scratch-image



Expand Down
33 changes: 33 additions & 0 deletions distro/docker/src/main/docker/Dockerfile.native-scratch
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
FROM quay.io/quarkus/ubi-quarkus-graalvmce-builder-image:22.3-java17 AS build

USER root

RUN microdnf install make gcc

COPY --chown=quarkus:quarkus . /code

RUN mkdir /musl && \
curl -L -o musl.tar.gz https://more.musl.cc/11.2.1/x86_64-linux-musl/x86_64-linux-musl-native.tgz && \
tar -xvzf musl.tar.gz -C /musl --strip-components 1 && \
curl -L -o zlib.tar.gz https://www.zlib.net/zlib-1.2.13.tar.gz && \
mkdir zlib && tar -xvzf zlib.tar.gz -C zlib --strip-components 1 && \
cd zlib && ./configure --static --prefix=/musl && \
make && make install && \
cd .. && rm -rf zlib && rm -f zlib.tar.gz && rm -f musl.tar.gz
ENV PATH="/musl/bin:${PATH}"

USER quarkus

WORKDIR /code

RUN ./mvnw clean install -DskipTests
RUN ./mvnw -T 1.5C package -B -Pnative -Pprod -DskipTests -Dquarkus.native.additional-build-args="--initialize-at-run-time=org.apache.kafka.common.security.authenticator.SaslClientAuthenticator","--allow-incomplete-classpath","--static","--libc=musl" -f ./app/pom.xml

FROM scratch

COPY --from=build /code/app/target/meta /work/meta
COPY --from=build /code/app/target/*-runner /application

EXPOSE 8080

CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]

0 comments on commit d8aa45d

Please sign in to comment.