Skip to content
Jim Clark edited this page Mar 31, 2022 · 4 revisions

This fork of clojure-polylith-realworld-example-app has a new project that uses jib to package the realworld-backend into a container image. There is an additional project at projects/realworld-backend-jib which demonstrates this packaging.

Testing

Clone or fork https://github.com/slimslenderslacks/clojure-polylith-realworld-example-app.

Build the container using the following commands.

cd projects/realworld-backend-jib
clj -T:jib build

This is configured to build an image to a local docker daemon (tagged with realworld-backend:latest).

Start up the server using the following command.

docker run --rm -p 6003:6003 realworld-backend

We could not use the existing project at projects/realworld-backend/deps.edn. This project was designed to run the server in the repl, and uses the furkan3ayraktar/polylith-clj-deps-ring library, which builds a classloader suitable for running a polylith app in a repl; however, this entrypoint is not ideal for a container. The jib packaging places all of the maven dependencies (slowest moving) in one layer. The clojure code is all packaged in the next layer; however, the code from the components could be packaged in a separate layer from the bases, and projects. This might be an advantage when the code in components are changing more slowly, and can be more aggressively cached during build cycles.

Clone this wiki locally