DevOps

Quarkus remote dev in Docker containers (Update)

In an earlier video, I shared how to run the Quarkus remote-dev mode in Docker containers, which is very helpful for local and remote development environments. Since Quarkus version 1.6, however, the way how we execute the remote dev mode has changed.

Assuming, we’d like to have the same setup like in the mentioned video.

What’s new is that we don’t have to start the remote Quarkus instance with Maven, but instead use a different packaging mode and some System variables.

You can check out the documentation how these different package modes are specified.

I want to continue running my production application in the same way as before, and only the remote-dev-enabled mode will be built differently:

# for remote-dev-mode
mvn clean package -Dquarkus.package.type=mutable-jar
docker build -f Dockerfile.dev -t tmp-builder .

docker run --rm \
  --name coffee-shop \
  -p 8080:8080 \
  -p 5005:5005 \
  tmp-builder

Our Quarkus app will be packaged as mutable-jar application and bundled in a Docker image. Our local Docker container will be started with published HTTP port 8080 and debug port 5005.

The Dockerfile.dev file looks now as follows:

# Dockerfile for remote-dev-mode
FROM adoptopenjdk/openjdk14-openj9:x86_64-alpine-jre-14_36.1_openj9-0.19.0
RUN apk add curl

ENV QUARKUS_LAUNCH_DEVMODE=true \
    JAVA_ENABLE_DEBUG=true

COPY target/quarkus-app/lib/ /deployments/lib/
COPY target/quarkus-app/*.jar /deployments/
COPY target/quarkus-app/app/ /deployments/app/
COPY target/quarkus-app/quarkus/ /deployments/quarkus/

CMD ["java", "-jar", \
  "-Dquarkus.http.host=0.0.0.0", \
  "-Djava.util.logging.manager=org.jboss.logmanager.LogManager", \
  "-Dquarkus.package.type=mutable-jar", \
  "-Dquarkus.live-reload.password=123", \
  "/deployments/quarkus-run.jar"]

The application will be started in (remote) dev mode, once the QUARKUS_LAUNCH_DEVMODE environment variable is set to true. Additionally, we define JAVA_ENABLE_DEBUG to get the same result like previously, namely that we can remote-debug our application via port 5005.

Then, from a new terminal we start the Maven remote-dev goal:

mvn quarkus:remote-dev -Ddebug=false \
  -Dquarkus.package.type=mutable-jar \
  -Dquarkus.live-reload.url=http://localhost:8080 \
  -Dquarkus.live-reload.password=123

The local Maven instance should not listen to a debug port, and we provide the same connection and packaging information.

Now, we can connect to localhost:8080, debug via localhost:5005, and see our source code changes being reflected in the running Quarkus application, again.

To get the full code example, see the updated coffee-shop project on GitHub, especially the systemtest-run-dev-env.sh script.

Published on Java Code Geeks with permission by Sebastian Daschner, partner at our JCG program. See the original article here: Quarkus remote dev in Docker containers (Update)

Opinions expressed by Java Code Geeks contributors are their own.

Sebastian Daschner

Sebastian Daschner is a self-employed Java consultant and trainer. He is the author of the book 'Architecting Modern Java EE Applications'. Sebastian is a Java Champion, Oracle Developer Champion and JavaOne Rockstar.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to top button