方法一、通过 dockerfile构建

创建dockerfile

首先,创建目录tomcat,用于存放后面的相关东西。

w3cschool@w3cschool:~$ mkdir -p ~/tomcat/webapps ~/tomcat/logs ~/tomcat/conf

webapps目录将映射为tomcat容器配置的应用程序目录

logs目录将映射为tomcat容器的日志目录

conf目录里的配置文件将映射为tomcat容器的配置文件

进入创建的tomcat目录,创建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"]

通过dockerfile创建一个镜像,替换成你自己的名字

w3cschool@w3cschool:~/tomcat$ docker build -t tomcat .

创建完成后,我们可以在本地的镜像列表里查找到刚刚创建的镜像

w3cschool@w3cschool:~/tomcat$ docker images|grep tomcat
tomcat              latest              70f819d3d2d9        7 days ago          335.8 mb

方法二、docker pull tomcat

查找docker hub上的tomcat镜像

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]

这里我们拉取官方的镜像

w3cschool@w3cschool:~/tomcat$ docker pull tomcat

等待下载完成后,我们就可以在本地镜像列表里查到repository为tomcat的镜像。


使用tomcat镜像

运行容器

w3cschool@w3cschool:~/tomcat$ docker run --name tomcat -p 8080:8080 -v $pwd/test:/usr/local/tomcat/webapps/test -d tomcat  
acb33fcb4beb8d7f1ebace6f50f5fc204b1dbe9d524881267aa715c61cf75320
w3cschool@w3cschool:~/tomcat$

命令说明:

-p 8080:8080:将容器的8080端口映射到主机的8080端口

-v $pwd/test:/usr/local/tomcat/webapps/test:将主机中当前目录下的test挂载到容器的/test

查看容器启动情况

w3cschool@w3cschool:~/tomcat$ docker ps 
container id    image     command               ... ports                    names
acb33fcb4beb    tomcat    "catalina.sh run"     ... 0.0.0.0:8080->8080/tcp   tomcat

通过浏览器访问