使用Docker创建Tomcat镜像

下面介绍以sun_jdk 1.8、tomcat 8.5、ubuntu 18.04环境为例介绍如何定制tomcat镜像。

一、准备工作

创建tomcat_jdk文件夹,下载jdk压缩包并解压,下载tomcat压缩包并解压,创建Dockerfile文件和run.sh文件:

root@ubuntu:/# mkdir tomcat_jdk
root@ubuntu:/#
root@ubuntu:/# cd tomcat_jdk/
root@ubuntu:/tomcat_jdk#
root@ubuntu:/tomcat_jdk#
root@ubuntu:/tomcat_jdk# touch Dockerfile run.sh
root@ubuntu:/tomcat_jdk#
root@ubuntu:/tomcat_jdk#
root@ubuntu:/tomcat_jdk# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38-windows-x64.zip
root@ubuntu:/tomcat_jdk# 
root@ubuntu:/tomcat_jdk# unzip apache-tomcat-8.5.38-windows-x64.zip

执行以上操作后,tomcat_jdk目录结构如下所示:

root@ubuntu:/tomcat_jdk# ll
total 28
drwxr-xr-x  4 root root 4096 Mar 16 03:59 ./
drwxr-xr-x 26 root root 4096 Mar 15 23:20 ../
drwxr-xr-x  9 root root 4096 Feb  5 11:45 apache-tomcat-8.5.38/
-rw-r--r--  1 root root  863 Mar 16 03:52 Dockerfile
drwxr-xr-x  7 uucp  143 4096 Dec 15 11:48 jdk1.8.0_201/
-rw-r--r--  1 root root  151 Mar 16 03:52 run.sh

二、Dockerfile脚本文件和其他脚本文件

Dockerfile文件内容如下:

#设置继承自自己创建的sshd:dockerfile镜像
FROM sshd:dockerfile

#创建者的基本信息
MAINTAINER docker_user (wuychn@163.com)

#设置环境变量,所有操作都是非交互式的
ENV DEBIAN_FRONTEND noninteractive

#更改系统时区
RUN apt-get install tzdata
RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata

#安装跟tomcat用户认证相关的软件
RUN apt-get install -yq --no-install-recommends wget pwgen ca-certificates && apt-get clean && rm -rf /var/lib/apt/lists/*

#设置tomcat的环境变量
ENV CATALINA_HOME /tomcat
ENV JAVA_HOME /jdk

#复制tomcat和jdk文件到镜像中
ADD apache-tomcat-8.5.38 /tomcat
ADD jdk1.8.0_201 /jdk
ADD create_tomcat_admin_user.sh /create_tomcat_admin_user.sh
ADD run.sh /run.sh

RUN chmod +x /*.sh
RUN chmod +x /tomcat/bin/*.sh

EXPOSE 8080
CMD ["/run.sh"]

创建tomcat用户和密码脚本文件create_tomcat_admin_user.sh,内容如下:

#!/bin/bash

if [ -f /.tomcat_admin_created ]; then
    echo "Tomcat 'admin' user already created"
    exit 0
fi

#generate password
PASS=${TOMCAT_PASS:-$(pwgen -s 12 1)}
_word=$( [ ${TOMCAT_PASS} ] && echo "preset" || echo "random" )

echo "=> Creating and admin user with a ${_word} password in Tomcat"
sed -i -r 's/<\/tomcat-users>//' ${CATALINA_HOME}/conf/tomcat-users.xml
echo '<role rolename="manager-gui"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
echo '<role rolename="manager-script"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
echo '<role rolename="manager-jmx"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
echo '<role rolename="admin-gui"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
echo '<role rolename="admin-script"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
echo "<user username=\"admin\" password=\"${PASS}\" roles=\"manager-gui,manager-script,manager-jmx,admin-gui, admin-script\"/>" >> ${CATALINA_HOME}/conf/tomcat-users.xml
echo '</tomcat-users>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
echo "=> Done!"
touch /.tomcat_admin_created

echo "========================================================================"
echo "You can now configure to this Tomcat server using:"
echo ""
echo "    admin:${PASS}"
echo ""
echo "========================================================================"

编写run.sh脚本文件,内容如下:

#!/bin/bash

if [ ! -f /.tomcat_admin_created ]; then
    /create_tomcat_admin_user.sh
fi
/usr/sbin/sshd -D &
exec ${CATALINA_HOME}/bin/catalina.sh run

此时,tomcat_jdk目录结构如下:

root@ubuntu:/tomcat_jdk# ll
total 28
drwxr-xr-x  4 root root 4096 Mar 16 03:59 ./
drwxr-xr-x 26 root root 4096 Mar 15 23:20 ../
drwxr-xr-x  9 root root 4096 Feb  5 11:45 apache-tomcat-8.5.38/
-rw-r--r--  1 root root 1318 Mar 16 03:52 create_tomcat_admin_user.sh
-rw-r--r--  1 root root  863 Mar 16 03:52 Dockerfile
drwxr-xr-x  7 uucp  143 4096 Dec 15 11:48 jdk1.8.0_201/
-rw-r--r--  1 root root  151 Mar 16 03:52 run.sh

三、创建和测试镜像

通过下面的命令创建镜像tomcat:jdk:

root@ubuntu:/tomcat_jdk# docker build -t tomcat:jdk .
Sending build context to Docker daemon  415.2MB
Step 1/16 : FROM sshd:dockerfile
 ---> c85255d043cd
Step 2/16 : MAINTAINER docker_user (wuychn@163.com)
......
Removing intermediate container 714fee0c78e5
 ---> a6c3a9fbb268
Successfully built a6c3a9fbb268
Successfully tagged tomcat:jdk

启动一个tomcat容器进行测试,并查看端口映射信息:

root@ubuntu:/tomcat_jdk# docker run -d -P tomcat:jdk
9b8d4681dd326dbfe12b479999d3250da733062963c0cb30fc852aa2ec47747e
root@ubuntu:/tomcat_jdk#
root@ubuntu:/tomcat_jdk#
root@ubuntu:/tomcat_jdk# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                            NAMES
9b8d4681dd32        tomcat:jdk          "/run.sh"           3 seconds ago       Up 2 seconds        0.0.0.0:32771->22/tcp, 0.0.0.0:32770->8080/tcp   wonderful_mclaren
root@ubuntu:/tomcat_jdk#

通过docker logs得到tomcat的密码:

root@ubuntu:/tomcat_jdk# docker logs 9b8
=> Creating and admin user with a random password in Tomcat
=> Done!
========================================================================
You can now configure to this Tomcat server using:

    admin:gG82Dg0KeJen

========================================================================
16-Mar-2019 10:57:49.172 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.38
16-Mar-2019 10:57:49.191 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Feb 5 2019 11:42:42 UTC
16-Mar-2019 10:57:49.192 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.5.38.0
16-Mar-2019 10:57:49.192 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
16-Mar-2019 10:57:49.193 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            4.4.0-143-generic
16-Mar-2019 10:57:49.193 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
16-Mar-2019 10:57:49.194 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /jdk/jre
16-Mar-2019 10:57:49.195 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           1.8.0_201-b09
16-Mar-2019 10:57:49.195 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
16-Mar-2019 10:57:49.196 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /tomcat
16-Mar-2019 10:57:49.196 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /tomcat
16-Mar-2019 10:57:49.197 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/tomcat/conf/logging.properties
16-Mar-2019 10:57:49.198 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
16-Mar-2019 10:57:49.199 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
16-Mar-2019 10:57:49.200 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
16-Mar-2019 10:57:49.200 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
16-Mar-2019 10:57:49.201 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
16-Mar-2019 10:57:49.202 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/tomcat
16-Mar-2019 10:57:49.202 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/tomcat
16-Mar-2019 10:57:49.203 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/tomcat/temp
16-Mar-2019 10:57:49.204 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
16-Mar-2019 10:57:49.714 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
16-Mar-2019 10:57:49.758 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
16-Mar-2019 10:57:49.815 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
16-Mar-2019 10:57:49.822 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
16-Mar-2019 10:57:49.838 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 2021 ms
16-Mar-2019 10:57:49.897 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
16-Mar-2019 10:57:49.917 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.38
16-Mar-2019 10:57:49.961 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/tomcat/webapps/ROOT]
16-Mar-2019 10:57:50.982 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/tomcat/webapps/ROOT] has finished in [1,020] ms
16-Mar-2019 10:57:50.988 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/tomcat/webapps/host-manager]
16-Mar-2019 10:57:51.118 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/tomcat/webapps/host-manager] has finished in [131] ms
16-Mar-2019 10:57:51.121 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/tomcat/webapps/manager]
16-Mar-2019 10:57:51.207 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/tomcat/webapps/manager] has finished in [86] ms
16-Mar-2019 10:57:51.213 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/tomcat/webapps/docs]
16-Mar-2019 10:57:51.271 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/tomcat/webapps/docs] has finished in [57] ms
16-Mar-2019 10:57:51.272 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/tomcat/webapps/examples]
16-Mar-2019 10:57:52.199 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/tomcat/webapps/examples] has finished in [927] ms
16-Mar-2019 10:57:52.209 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
16-Mar-2019 10:57:52.253 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
16-Mar-2019 10:57:52.278 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 2439 ms

在本地浏览器访问tomcat,端口是32770:

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值