Docker installs Tomcat
Method one, built by Dockerfile
Create Dockerfile
First, create a directory, tomcat, to store the relevant things that follow.
w3cschool@w3cschool:~$ mkdir -p ~/tomcat/webapps ~/tomcat/logs ~/tomcat/conf
The webapps directory maps to the application directory configured by the tomcat container
The logs directory is mapped to the log directory of the tomcat container
The profile in the conf directory is mapped to the profile of the tomcat container
Go to the tomacat directory you created and create Dockerfile
FROM java:8-jre ENV CATALINA_HOME /usr/local/tomcat ENV PATH $CATALINA_HOME/bin:$PATH RUN mkdir -p "$CATALINA_HOME" WORKDIR $CATALINA_HOME # runtime dependencies for Tomcat Native Libraries # Tomcat Native 1.2+ requires a newer version of OpenSSL than debian:jessie has available (1.0.2g+) # see http://tomcat.10.x6.nabble.com/VOTE-Release-Apache-Tomcat-8-0-32-tp5046007p5046024.html (and following discussion) ENV OPENSSL_VERSION 1.0.2h-1 RUN { \ echo 'deb http://httpredir.debian.org/debian unstable main'; \ } > /etc/apt/sources.list.d/unstable.list \ && { \ # add a negative "Pin-Priority" so that we never ever get packages from unstable unless we explicitly request them echo 'Package: *'; \ echo 'Pin: release a=unstable'; \ echo 'Pin-Priority: -10'; \ echo; \ # except OpenSSL, which is the reason we're here echo 'Package: openssl libssl*'; \ echo "Pin: version $OPENSSL_VERSION"; \ echo 'Pin-Priority: 990'; \ } > /etc/apt/preferences.d/unstable-openssl RUN apt-get update && apt-get install -y --no-install-recommends \ libapr1 \ openssl="$OPENSSL_VERSION" \ && rm -rf /var/lib/apt/lists/* # see https://www.apache.org/dist/tomcat/tomcat-8/KEYS RUN set -ex \ && for key in \ 05AB33110949707C93A279E3D3EFE6B686867BA6 \ 07E48665A34DCAFAE522E5E6266191C37C037D42 \ 47309207D818FFD8DCD3F83F1931D684307A10A5 \ 541FBE7D8F78B25E055DDEE13C370389288584E7 \ 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 \ 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED \ 9BA44C2621385CB966EBA586F72C284D731FABEE \ A27677289986DB50844682F8ACB77FC2E86E29AC \ A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 \ DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 \ F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE \ F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23 \ ; do \ gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ done ENV TOMCAT_MAJOR 8 ENV TOMCAT_VERSION 8.0.35 ENV TOMCAT_TGZ_URL https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz RUN set -x \ \ && curl -fSL "$TOMCAT_TGZ_URL" -o tomcat.tar.gz \ && curl -fSL "$TOMCAT_TGZ_URL.asc" -o tomcat.tar.gz.asc \ && gpg --batch --verify tomcat.tar.gz.asc tomcat.tar.gz \ && tar -xvf tomcat.tar.gz --strip-components=1 \ && rm bin/*.bat \ && rm tomcat.tar.gz* \ \ && nativeBuildDir="$(mktemp -d)" \ && tar -xvf bin/tomcat-native.tar.gz -C "$nativeBuildDir" --strip-components=1 \ && nativeBuildDeps=" \ gcc \ libapr1-dev \ libssl-dev \ make \ openjdk-${JAVA_VERSION%%[-~bu]*}-jdk=$JAVA_DEBIAN_VERSION \ " \ && apt-get update && apt-get install -y --no-install-recommends $nativeBuildDeps && rm -rf /var/lib/apt/lists/* \ && ( \ export CATALINA_HOME="$PWD" \ && cd "$nativeBuildDir/native" \ && ./configure \ --libdir=/usr/lib/jni \ --prefix="$CATALINA_HOME" \ --with-apr=/usr/bin/apr-1-config \ --with-java-home="$(docker-java-home)" \ --with-ssl=yes \ && make -j$(nproc) \ && make install \ ) \ && apt-get purge -y --auto-remove $nativeBuildDeps \ && rm -rf "$nativeBuildDir" \ && rm bin/tomcat-native.tar.gz # verify Tomcat Native is working properly RUN set -e \ && nativeLines="$(catalina.sh configtest 2>&1)" \ && nativeLines="$(echo "$nativeLines" | grep 'Apache Tomcat Native')" \ && nativeLines="$(echo "$nativeLines" | sort -u)" \ && if ! echo "$nativeLines" | grep 'INFO: Loaded APR based Apache Tomcat Native library' >&2; then \ echo >&2 "$nativeLines"; \ exit 1; \ fi EXPOSE 8080 CMD ["catalina.sh", "run"]
Create a mirror with Dockerfile and replace it with your own name
w3cschool@w3cschool:~/tomcat$ docker build -t tomcat .
Once the creation is complete, we can find the image we just created in the local mirror list
w3cschool@w3cschool:~/tomcat$ docker images|grep tomcat tomcat latest 70f819d3d2d9 7 days ago 335.8 MB
Method two, docker pull tomcat
Find the tomcat image on Docker Hub
w3cschool@w3cschool:~/tomcat$ docker search tomcat NAME DESCRIPTION STARS OFFICIAL AUTOMATED tomcat Apache Tomcat is an open source implementa... 744 [OK] dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 ba... 19 [OK] consol/tomcat-7.0 Tomcat 7.0.57, 8080, "admin/admin" 16 [OK] consol/tomcat-8.0 Tomcat 8.0.15, 8080, "admin/admin" 14 [OK] cloudesire/tomcat Tomcat server, 6/7/8 8 [OK] davidcaste/alpine-tomcat Apache Tomcat 7/8 using Oracle Java 7/8 wi... 6 [OK] andreptb/tomcat Debian Jessie based image with Apache Tomc... 4 [OK] kieker/tomcat 2 [OK] fbrx/tomcat Minimal Tomcat image based on Alpine Linux 2 [OK] jtech/tomcat Latest Tomcat production distribution on l... 1 [OK]
Here we pull the official mirror image
w3cschool@w3cschool:~/tomcat$ docker pull tomcat
After waiting for the download to complete, we can find THESITORY as tomcat's image in the local mirror list.
Use tomcat mirroring
Run the container
w3cschool@w3cschool:~/tomcat$ docker run --name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat acb33fcb4beb8d7f1ebace6f50f5fc204b1dbe9d524881267aa715c61cf75320 w3cschool@w3cschool:~/tomcat$
Command Description:
-p 8080:8080: Map the container's 8080 port to the host's 8080 port
-$PWD/test:/usr/local/tomcat/webapps/test: Mount test from the current directory in the host to the container's /test
View how the container started
w3cschool@w3cschool:~/tomcat$ docker ps CONTAINER ID IMAGE COMMAND ... PORTS NAMES acb33fcb4beb tomcat "catalina.sh run" ... 0.0.0.0:8080->8080/tcp tomcat
Accessed through a browser