Docker Image with Java and Jolokia
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
base/alpine/jre/8
openjdk-6
openjdk-7
openjdk-8
templates
.gitignore
LICENSE
README.md
build.js
config.json
package.json

README.md

NOTE

Please note that this project has been superseded by https://github.com/fabric8io-images/java which has some extra features like nice run script which respects the container boundaries. Its available for Java 8 and Java 7.

So, when you require Java 6 or Java 7 then this project might still be of value for you. But please note that it is not maintained anymore.


Spicy Docker Java Image with Jolokia

This repository holds automated builds for variants of the official java Java docker image which allow to easily start a Jolokia agent.

In order to use the agent, a child image which inherits from this image should call jolokia_opts, which echos all relevant options which should be included as argument to the Java startup command.

Here is a simple example for creating a Tomcat 7 images which starts Jolokia along with tomcat:

FROM jolokia/java-jolokia:7
ENV TOMCAT_VERSION 7.0.55
ENV TC apache-tomcat-${TOMCAT_VERSION}

EXPOSE 8080 8778
RUN wget http://archive.apache.org/dist/tomcat/tomcat-7/v${TOMCAT_VERSION}/bin/${TC}.tar.gz
RUN tar xzf ${TC}.tar.gz -C /opt

CMD env CATALINA_OPTS=$(jolokia_opts) /opt/${TC}/bin/catalina.sh run

(Don't forget to use $(jolokia_opts) or with backticks, but not ${jolokia_opts})

The configuration of the Jolokia agent can be influenced with various environments variables. Please refer to the READMEs of the various image variants.

Build system

For generating the images a simple node.js based templating script is used. The templates can be found in the directory templates which uses the doT templating library. All you need is to adapt config.json if to upgrade the version number or adding a new build.

For the initial setup, npm install needs to install some dependencies.

./build.js will create the final automated build from the configuration and the templates. When calling ./build.js -b then all images are build locally when a Docker daemon is running (and DOCKER_HOST is set properly). With ./build.js -h a short help message is printed.

Drive-By Jolokia

(by courtesy of @paoloantinori)

There a circumstance where you can't use these images as a base because you have to use ready-made images. In that case you can still use the Jolokia JVM agent capability to attach to an already running Java process by injecting the agent to an already running process.

For example if use the stock Wildfly Image, then you can inject Jolokia with the following command:

docker run \
  -P -p 8778 \
  -v /data/installers/jolokia-jvm-1.2.2-agent.jar:/opt/jolokia/jolokia.jar \
  -it jboss/wildfly  \
  sh -c 'exec /opt/wildfly/bin/standalone.sh  -b 0.0.0.0 -bmanagement 0.0.0.0 &  \
  while ! curl -m 10 http://localhost:8080 ; do echo still down ; sleep 1s ; done ; \
  java -jar /opt/jolokia/jolokia.jar --host 0.0.0.0 ".*jboss-modules.*"; \
  sh'

Where:

  • /data/installers/jolokia-jvm-1.2.2-agent.jar is a path on your host to the Jolokia JVM agent
  • while ! curl -m 10 http://localhost:8080 ; do echo still down ; sleep 1s ; done ; is needed due to peculiar behavior of Wildfly, classloading and agents. Basically we are just waiting for Wildfly to be up and running.
  • ".*jboss-modules.*" is a regexp to identify a unique process in the output of ps ax
  • instead of using -v to inject a host file inside the container you could consider a more portable approach with Docker data only containers. See this blog post for an explanation of this pattern.