Stambia analytics on Docker
Docker is the leading container platform and can be used to run Stambia Analytics inside containers. This article explains how to build a Stambia Analytics container using Tomcat web server. The installation of a docker client and the detailed command options are out of scope of this article, please refer to official documentation at Docker docs
Prerequisites:
- stambia analytics zip archive from stambia.org
- Docker client environment ready
As Stambia Analytics needs to be deployed on a web server, we must use a proper base container such as tomcat:8.5.40. Stambia analytics deployment on JBoss wildfly was also tested (using jboss/wildfly base container), but this article focuses on Tomcat.
Before building the container we must prepare some configuration files for Tomcat. In the example below I use a tomcat-users.xml file to create a user to connect to Stambia Analytics, a context.xml file to declare an external database, and a context-manager.xml file for security purpose. You should also prepare the necessary jdbc drivers that analytics would need - I use a dedicated "drivers" folder for that.
Please refer to Stambia Analytics Installation Guide and Tomcat official documentation for more information regarding configurations.
Once you have gathered all the files, you can prepare a folder to build your container and add the analytics.war extracted from the Stambia Analytics zip archive :
The wait-for-it script can be used in case you need the container to wait for a particular HOST & TCP port to be reachable from the container before starting up the web server. You can find this script at https://github.com/vishnubob/wait-for-it If you don't need it you can remove the copy line for this file from the Dockerfile
The Dockerfile looks like this :
FROM tomcat:8.5.40-jre8-slim RUN mkdir -p /opt/analytics/jdbc COPY tomcat-users.xml /usr/local/tomcat/conf/ COPY context.xml /usr/local/tomcat/conf/ COPY context-manager.xml /usr/local/tomcat/webapps/manager/META-INF/context.xml COPY ./drivers /usr/local/tomcat/lib COPY wait-for-it.sh /opt/analytics ENV STAMBIA_WEBAPP_HOME /opt/analytics COPY analytics.war /usr/local/tomcat/webapps
An example can be downloaded here : Dockerfile (rename to Dockerfile)
From this folder type the following commands to build the container image :
>cd myDockerFolder
>docker build . -t <containername>
Example :
>docker build . -t myrepo/analytics
The output should look like this :
Then you can start your container interactively (-it) using the following command :
>docker run -it -p <hostport>:<guestport> --rm <containername>
By default Tomcat uses port 8080 for http communications, so if you want to expose the internal 8080 port of the Stambia Analytics container to the port 7000 on your host you can run the following command :
>docker run -it --rm -p 7000:8080 myrepo/analytics
To keep application data accross restarts you can externalize the application folder using the --mount option :
>docker run -it --rm -p 7000:8080 --mount type=bind,source=D:\Docker\runtime\sharedFolder\analytics,target=/opt/analytics myrepo/analytics