Helidon app using Docker, JDK 21 GraalVM, Jsoniter and Scala 3.
Currently configured features:
[Config, Encoding, Health, Media, Metrics, Observe, OpenAPI, WebClient, WebServer]
- Logging does not work correctly --- with Helidon messages going to console, not ./target/server.log.
- Metrics throws warnings. See Metrics section below.
GraalVM install:
- tar -xzf graalvm-jdk-21_macos-aarch64_bin
- sudo mv graalvm-jdk-21+35.1 /Library/Java/JavaVirtualMachines
- sudo xattr -r -d com.apple.quarantine /Library/Java/JavaVirtualMachines/graalvm-jdk-21+35.1
Step 3 fixes this error: graalvm-jdk-21+35.1 is damanged and can't be opened.
Docker install:
- sbt clean run
- curl -v http://localhost:7979/now
- curl -X POST http://localhost:7979/command -H "Content-Type: application/json" -d '{"name":"run command"}'
- curl -s -H 'Accept: text/plain' -X GET http://localhost:7979/observe/metrics
Warning:
Server
throws this warning:
Unexpected discovery of unknown previously-created meter; creating wrapper for io.micrometer.core.instrument.composite.CompositeFunctionCounter
Yet the above curl command works correctly.
- curl -X GET http://localhost:7979/openapi
Takes around 60 seconds. Note: Only 1 main class is allowed in an sbt-native-packager project.
- sbt 'show graalvm-native-image:packageBin'
- ./target/graalvm-native-image/helidon
- curl -v http://localhost:7979/now
- sbt clean compile stage
- sbt docker:stage ( see target/docker/stage/Dockerfile )
- sbt docker:publishLocal
- docker images ( note helidon-server:0.4 listed )
- docker run --rm -it -d -p 7979:7979/tcp helidon-server:0.4
- docker ps ( note helidon-server:0.4 listed )
- docker exec -it container-id /bin/bash
- curl http://localhost:7979/now ( via docker container )
- curl http://localhost:7979/now ( via localhost )
- docker stop container-id ( obtain container-id via docker ps listing )
- docker ps ( note helidon-server:0.4 not listed )
- list images - docker images
- remove image - docker image rm image-id --force
- list containers - docker ps
- logs - docker logs container-id
To publish / push a docker image to DockerHub, consider one of these options:
- Docker Dashboard
- Microsoft VSCode Docker
- sbt -Ddocker.username=user-name -Ddocker.registry=registry-url docker:publish