Note. tomcat8 spits on 8080
by default, but you should also expose 8443
just in case you enable SSL on the Tomcat side (doing it on the reverse proxy might be enough).
Launch a contained based on the custom/ubuntu image,
app=tomcatprod volume=/data/$app docker ps -a | grep $app docker run -d --name $app -h $app \ -p 80XX:8080 -p 84XX:8443 \ -v $volume:/$app \ --cap-add=SYS_PTRACE \ custom/ubuntu #tomcatprod.<datetag>.ready docker ps -a | grep $app docker logs $app docker exec -ti $app bash #docker exec -ti $app service tomcat8 start #docker exec -ti $app ps aux
Note. change port 80XX & 84XX depending on what’s available (docker ps -a
) e.g. 8001 & 8401
Note. --cap-add=SYS_PTRACE
to make the [init script work] (https://github.com/docker/docker/issues/6800)
I am assuming those variables are already set, as custom/ubuntu image provides an already modified /etc/bash.bashrc
,
echo DEBIAN_FRONTEND=noninteractive echo TERM=xterm
apt -y install tomcat8 tomcat8-admin dpkg -l | grep tomcat dpkg -l | grep jdk cd ~/ ln -s /var/lib/tomcat8/conf ln -s /var/lib/tomcat8/logs ln -s /var/lib/tomcat8/webapps ln -s /tomcatprod cp -pi /var/lib/tomcat8/conf/tomcat-users.xml /var/lib/tomcat8/conf/tomcat-users.xml.dist vi /var/lib/tomcat8/conf/tomcat-users.xml <role rolename="manager-gui"/> <user username="tomcat" password="PASSWORD" roles="manager-gui"/> echo "manager-gui: tomcat / PASSWORD" >> ~/README
Note. change PASSWORD accordingly.
cd /var/lib/tomcat8/conf/ cp -pi server.xml server.xml.dist grep autoDeploy server.xml grep unpackWARs server.xml
apt -y install software-properties-common apt-transport-https echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections echo debconf shared/accepted-oracle-license-v1-1 seen true | debconf-set-selections echo '' | add-apt-repository ppa:webupd8team/java >/dev/null apt -y update apt -y install oracle-java8-installer apt -y install oracle-java8-set-default cd /etc/default/ cp -pi tomcat8 tomcat8.dist vi tomcat8 JAVA_HOME=/usr/lib/jvm/java-8-oracle #JAVA_OPTS="-Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC" #E.G. FOR AN APP USING 1 to 3 GB, JAVA_OPTS="-Djava.awt.headless=true -Xms1g -Xmx3g -XX:+UseConcMarkSweepGC" update-java-alternatives -s java-8-oracle #update-alternatives --config java ll /usr/bin/java ll /etc/alternatives/java echo "export JAVA_HOME=/usr/lib/jvm/java-8-oracle" >> /etc/bash.bashrc source /etc/bash.bashrc
Note. webupd8team/java provides Ubuntu only pkgs, no more Jessie repo available :-/
start the daemon (assuming the container was started with --cap-add=SYS_PTRACE
),
service tomcat8 start
make sure it’s running the Java version you want (e.g. of you installed Oracle Java),
ps aux | grep java
check that the docker container listens on port 80XX, ON THE DOCKER HOST,
docker ps
check that the service responds with a web browser,
http://dockerhost:80XX/
is everything’s fine? Eventually clean-up /var/log/tomcat8/
and possibly uneeded apps from webapps
,
cd ~/webapps/ mkdir ~/.trash/ mv ROOT/ ~/.trash/
and backup the container as an image then, ON THE DOCKER HOST,
docker commit -p tomcatprod tomcatprod.`date +%s`.ready
TODO (as long as it is served by a localhost reverse-proxy that provides ssl to the world, it’s not so absolutely mandatory to switch to https on the tomcat itself)
You can now setup the reverse proxy to link to 80XX or 84XX (sslproxyengine) if you’ve already setup tomcat-SSL. See Setting up a Reverse Proxy with Apache
Prevent the stupid WARNINGs about non existent folders,
cd ~/conf/ mv -p catalina.properties catalina.properties.dist wget http://svn.apache.org/repos/asf/tomcat/tc8.0.x/trunk/conf/catalina.properties chown root:tomcat8 catalina.properties