-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1358 from vorburger/issue-304_s2i-native
Native S2I Builder image
- Loading branch information
Showing
4 changed files
with
139 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
# [Quarkus.io](http://quarkus.io) *native* S2I builder | ||
# Original Author: Michael Vorburger.ch | ||
|
||
# This part is heavily inspired by ../centos-graal/Dockerfile | ||
FROM centos:latest | ||
|
||
ARG GRAAL_VERSION=1.0.0-rc13 | ||
ARG MAVEN_VERSION=3.6.0 | ||
|
||
ARG GRAAL_CE_URL=https://github.com/oracle/graal/releases/download/vm-${GRAAL_VERSION}/graalvm-ce-${GRAAL_VERSION}-linux-amd64.tar.gz | ||
ARG MAVEN_URL=https://archive.apache.org/dist/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz | ||
|
||
ENV JAVA_HOME=/opt/graalvm | ||
ENV PATH=$PATH:$JAVA_HOME/bin | ||
ENV GRAALVM_HOME=/opt/graalvm | ||
ENV QUARKUS_HOME=/home/quarkus | ||
|
||
RUN yum update -y && \ | ||
yum install -y --setopt=skip_missing_names_on_install=False \ | ||
tar gzip gcc glibc-devel zlib-devel curl && \ | ||
mkdir -p /opt/graalvm && \ | ||
cd /opt/graalvm && \ | ||
curl -fsSL $GRAAL_CE_URL | tar -xzC /opt/graalvm --strip-components=1 && \ | ||
|
||
# This part is inspired by ../centos-graal-maven/Dockerfile and fabric8io-images/s2i | ||
|
||
mkdir -p /usr/share/maven && \ | ||
curl -fsSL ${MAVEN_URL} | tar -xzC /usr/share/maven --strip-components=1 && \ | ||
ln -s /usr/share/maven/bin/mvn /usr/bin/mvn && \ | ||
|
||
adduser -u 1001 -g 0 quarkus --home-dir ${QUARKUS_HOME} && \ | ||
chown -R 1001:0 ${QUARKUS_HOME} && \ | ||
chmod -R ug+rwX ${QUARKUS_HOME} | ||
|
||
ENV MAVEN_HOME /usr/share/maven | ||
ENV MAVEN_CONFIG ${QUARKUS_HOME}/.m2 | ||
ENV MAVEN_OPTS="-XX:+TieredCompilation -XX:TieredStopAtLevel=1" | ||
|
||
# This part is firmly inspired by fabric8io-images/s2i | ||
|
||
LABEL io.openshift.s2i.scripts-url="image:///usr/local/s2i" \ | ||
io.openshift.s2i.destination="/tmp" \ | ||
|
||
io.k8s.description="Quarkus.io S2I image for building Kubernetes Native Java GraalVM applications and running its Native Executables" \ | ||
io.k8s.display-name="Quarkus.io S2I (GraalVM Native)" \ | ||
io.openshift.tags="builder,java,quarkus,native" | ||
|
||
# S2I scripts + README | ||
COPY s2i /usr/local/s2i | ||
RUN chmod 755 /usr/local/s2i/* | ||
ADD README.md /usr/local/s2i/usage.txt | ||
|
||
ENV PATH=$PATH:"/usr/local/s2i" | ||
|
||
USER 1001 | ||
|
||
EXPOSE 8080 | ||
|
||
# Use the run script as default since we are working as an hybrid image which can be | ||
# used directly to. (If we were a plain s2i image we would print the usage info here.) | ||
CMD [ "/usr/local/s2i/run" ] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
# [Quarkus.io](http://quarkus.io) GraalVM Native S2I | ||
|
||
## OpenShift | ||
|
||
### Minishift 8 GB Set-Up recommendation | ||
|
||
minishift profile delete quarkus-s2i-native | ||
minishift profile set quarkus-s2i-native | ||
minishift config set memory 8192 | ||
minishift start | ||
|
||
### OpenShift Build | ||
|
||
oc new-build https://github.com/quarkusio/quarkus.git --context-dir=docker/centos-graal-maven-s2i --name quarkus-native-s2i | ||
oc logs -f bc/quarkus-native-s2i | ||
|
||
### OpenShift Use | ||
|
||
oc new-app quarkus-native-s2i~https://github.com/quarkusio/quarkus-quickstarts --context-dir=getting-started --name=getting-started-native | ||
oc logs -f bc/getting-started-native | ||
oc expose svc/getting-started-native | ||
|
||
Note that GraalVM-based native build are more memory & CPU intensive than regular pure Java builds. | ||
[By default, builds are completed by pods using unbound resources, such as memory and CPU](https://docs.openshift.com/container-platform/3.11/dev_guide/builds/advanced_build_operations.html), | ||
but note that [your OpenShift Project may have limit ranges defined](https://docs.openshift.com/container-platform/3.11/admin_guide/limits.html#admin-guide-limits). | ||
|
||
Testing indicates that the "hello, world" getting-started demo application builds in around 2 minutes on typical hardware when the build is given 4 GB of RAM and 4 (virtual) CPUs for concurrency. You therefore may need to increase the respective limits for OpenShift's S2I build containers like so: | ||
|
||
apiVersion: "v1" | ||
kind: "BuildConfig" | ||
metadata: | ||
name: "getting-started-native" | ||
spec: | ||
resources: | ||
limits: | ||
cpu: '4' | ||
memory: 4Gi | ||
|
||
The following `oc patch` command does this: | ||
|
||
oc patch bc/getting-started-native -p '{"spec":{"resources":{"limits":{"cpu":"4", "memory":"4Gi"}}}}' | ||
|
||
## Locally (only for testing) | ||
|
||
### Local Build | ||
|
||
docker build . -t quarkus-native-s2i | ||
|
||
### Local use | ||
|
||
sudo dnf install source-to-image | ||
|
||
s2i build --copy ../../../quarkus-quickstarts/getting-started quarkus-native-s2i getting-started-native | ||
|
||
docker run --rm -it -p 8080:8080 getting-started-native | ||
|
||
curl http://localhost:8080/hello/greeting/quarkus |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
#!/bin/sh | ||
|
||
# This POC script is based on the openshift/source-to-image project documentation, | ||
# and loosely inspired by fabric8io-images/s2i's assemble script, but **MUCH** simplified; | ||
# a TODO future PRODUCTION version of this would probably want to re-use that script... | ||
|
||
set -ex | ||
|
||
cd /tmp/src/ | ||
mvn package -Pnative -e -B \ | ||
-DskipTests -Dmaven.javadoc.skip=true -Dmaven.site.skip=true -Dmaven.source.skip=true \ | ||
-Djacoco.skip=true -Dcheckstyle.skip=true -Dfindbugs.skip=true -Dpmd.skip=true -Dfabric8.skip=true | ||
cp -v target/*-runner ${QUARKUS_HOME} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
#!/bin/sh | ||
|
||
# This POC script is (intentionally) overly trivial. | ||
# a TODO future PRODUCTION version of this would probably want tomake it possible to | ||
# e.g. pass additional parameters to the executable, as does fabric8io-images/s2i's run script. | ||
|
||
${QUARKUS_HOME}/*-runner -Dquarkus.http.host=0.0.0.0 |