Browse Source

Do multistage build

invoke -
docker build -f src/main/docker/Dockerfile.multistage -t quarkus-quickstart/getting-started .
master
Jonathan Christison 5 years ago
parent
commit
0bf4f5e4cf
  1. 12
      README.md
  2. 5
      getting-started/.dockerignore
  3. 31
      getting-started/src/main/docker/Dockerfile.multistage
  4. 15
      getting-started/src/main/java/org/acme/getting/started/GreetingResource.java
  5. 12
      getting-started/src/main/java/org/acme/getting/started/GreetingService.java
  6. 15
      getting-started/src/test/java/org/acme/getting/started/GreetingResourceTest.java

12
README.md

@ -17,6 +17,10 @@
* ArC - CDI (injection framework), developed from Weld
* Command mode - terminates exits after run as opposed to normal operation (wait for systemexit or pod to be killed)
* Jandex - Java annotations indexer (Jason Green dev)
# General Notes
Quarkus built upon VERT-X for non-blocking IO, VERT-X mostly built upon netty, Vert-X provides a 80+ connectors for non-blocking IO like Kafka, mongodb, AMQP etc
@ -59,11 +63,13 @@ uni.onItem()
# The plan
- [ ] Understand technologies and terminologies
- [ ] Fire up Quarkus example
- [ ] Fire up Quarkus example (hello world)
- [ ] Design an LED conversion proxy for front porch
- [ ] Listen to MQTT broker
- [ ] Possibly use camel k to write mqtt to file or something
- [ ] "Translate" and passthrough to porchLED
- [ ] Write TestNG tests
- [ ] Mockquito
# Refs
@ -72,6 +78,6 @@ uni.onItem()
* [CDI explained](https://www.youtube.com/watch?v=Q8jHRDu9Fbo)
* [Mutiny lib/Vert-X](https://www.youtube.com/watch?v=uTK73fpPznQ)
* [Weld](http://weld.cdi-spec.org/)
* [Quickstart hello world](https://quarkus.io/guides/getting-started)
& [Building native image](https://quarkus.io/guides/building-native-image) - Used multistage build

5
getting-started/.dockerignore

@ -1,5 +0,0 @@
*
!target/*-runner
!target/*-runner.jar
!target/lib/*
!target/quarkus-app/*

31
getting-started/src/main/docker/Dockerfile.multistage

@ -0,0 +1,31 @@
## Stage 1 : build with maven builder image with native capabilities
FROM quay.io/quarkus/centos-quarkus-maven:20.1.0-java11 AS build
COPY pom.xml /usr/src/app/
RUN mvn -f /usr/src/app/pom.xml -B de.qaware.maven:go-offline-maven-plugin:1.2.5:resolve-dependencies
COPY src /usr/src/app/src
USER root
RUN chown -R quarkus /usr/src/app
USER quarkus
RUN mvn -f /usr/src/app/pom.xml -Pnative clean package
## Stage 2 : create the docker final image
FROM registry.access.redhat.com/ubi8/ubi-minimal
WORKDIR /work/
COPY --from=build /usr/src/app/target/*-runner /work/application
# set up permissions for user `1001`
RUN chmod 775 /work /work/application \
&& chown -R 1001 /work \
&& chmod -R "g+rwX" /work \
&& chown -R 1001:root /work
EXPOSE 8080
USER 1001
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]

15
getting-started/src/main/java/org/acme/getting/started/GreetingResource.java

@ -1,16 +1,29 @@
package org.acme.getting.started;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.jboss.resteasy.annotations.jaxrs.PathParam;
@Path("/hello")
public class GreetingResource {
@Inject
GreetingService service;
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/greeting/{name}")
public String greeting(@PathParam String name) {
return service.greeting(name);
}
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
}

12
getting-started/src/main/java/org/acme/getting/started/GreetingService.java

@ -0,0 +1,12 @@
package org.acme.getting.started;
import javax.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
//return "Hey " + name;
return "Hey " + name + ", You're an idiot";
}
}

15
getting-started/src/test/java/org/acme/getting/started/GreetingResourceTest.java

@ -3,6 +3,8 @@ package org.acme.getting.started;
import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Test;
import java.util.UUID;
import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.is;
@ -17,5 +19,14 @@ public class GreetingResourceTest {
.statusCode(200)
.body(is("hello"));
}
}
@Test
public void testGreetingEndpoint() {
String uuid = UUID.randomUUID().toString();
given()
.pathParam("name", uuid)
.when().get("/hello/greeting/{name}")
.then()
.statusCode(200)
.body(is("Hey " + uuid + ", You're an idiot"));
}
}

Loading…
Cancel
Save