docker(12):alpinelinux安装tomcat

1,tomcat


使用alpine环境自己打包安装一个tomcat环境。
使用的是openjdk的jre,目标就是系统尽量的小。
依赖的东西尽量的少。构建tomcat最少需要一个jre。
使用的openjdk8的jre,才106mb。已经非常的小了。
http://blog.csdn.net/freewebsys/article/details/53744348
下载tomcat:
http://tomcat.apache.org/download-80.cgi
tomcat最新的版本是8.5.9 ,tomcat9 还在测试中,生产环境使用tomcat8就行了,性能足够了。

2,整理下tomcat


tar -zxvf apache-tomcat-8.5.9.tar.gz 
mv apache-tomcat-8.5.9 tomcat
cd tomcat
rm -rf LICENSE NOTICE RELEASE-NOTES RUNNING.txt webapps/* bin/* conf/tomcat-users*

首先解压缩,然后把tomcat里面的乱七八糟的东西删除下。
什么ROOT,Manager,user啥的,防止别人获得管理权限。
然后修改下service.xml,设置ROOT是 / 访问。

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
    <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

    <GlobalNamingResources/>
    <Service name="Catalina">
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000" redirectPort="8443"/>
        <Engine name="Catalina" defaultHost="localhost">

            <Host name="localhost" appBase="webapps"
                  unpackWARs="true" autoDeploy="true">
                <Context docBase="ROOT" path="/"/>
                <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                       prefix="access_log" suffix=".txt"
                       pattern="%h %l %T %t %r %s %b %{Referer}i %{User-Agent}i"/>
            </Host>
        </Engine>
    </Service>
</Server>

其中删除了JreMemoryLeakPreventionListener,关闭了tomcat的一个小时一次的full gc操作。
正常系统上线,内存一般都设置的很大不用担心这个。
http://gao-xianglong.iteye.com/blog/2171441

3,打包tomcat


vi Dockerfile

# AlpineLinux open jre 8 & tomcat
FROM demo/openjre8-base:1.0

# add tomcat

RUN mkdir -p /opt
COPY tomcat /opt/tomcat

# Set environment
ENV TOMCAT_HOME /opt/tomcat
ENV PATH ${PATH}:${TOMCAT_HOME}/bin

ENTRYPOINT ["/opt/tomcat/bin/catalina.sh", "run"]

注意这里依赖openjre8 的镜像,要提前打好。
构建:

docker build -t demo/tomcat-base:1.0 .

这样打包的tomcat 只有 114.8 MB 。非常的小呢。

4,测试启动


创建文件夹:

mkdir -p /data/tomcat/ROOT/WEB-INF
echo "ok" > /data/tomcat/ROOT/index
vi /data/tomcat/ROOT/WEB-INF/web.xml

写一个web.xml 配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1"
         metadata-complete="true">
</web-app>

创建临时文件夹,log文件夹,temp文件夹,并设置权限。
在做tomcat基础包的时候,把ROOT文件夹空出来,以后的应用要使用的时候再加上。

mkdir -p /data/tomcat/logs
mkdir -p /data/tomcat/temp
chcon -Rt svirt_sandbox_file_t /data/tomcat/logs
chcon -Rt svirt_sandbox_file_t /data/tomcat/temp

启动tomcat:

docker run -d -p 8080:8080 -v /data/tomcat/ROOT:/opt/tomcat/webapps/ROOT \
 -v /data/tomcat/logs:/opt/tomcat/logs -v /data/tomcat/temp:/opt/tomcat/temp \
  --name tomcat-test demo/tomcat-base:1.0

启动tomcat并绑定端口8080,映射目录/data/tomcat/ROOT 作为主目录,同时映射logs和temp文件夹。
这样直接可以看tomcat的日志了。

#curl localhost:8080/index
ok

测试下能访问成功。
进入docker容器查看:
docker exec -it tomcat-test bash
bash-4.3# df

4,总结


本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/53761840 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys
特别注意一点。有的是docker启动的时候并没有带动tomcat启动,而是直接退出了。
这个并不是docker的问题。是因为使用的命令不对。要使用 catalina.sh run 这个参数,这个命令一直执行。
如果使用startup.sh的时候就上后台了。docker以为有问题了。shell执行完了,就直接退出了。然后就不能-d执行了。
也就是说,使用entrypoint 和cmd 命令必须是一个死循环一直执行的命令。
entrypoin和cmd的区别就是cmd可以被替换。
要是使用 docker run -it demo/tomcat-base bash这个命令执行两个不同包。
entrypoint的包tomcat会启动,而cmd打的包,tomcat被shell替换了。不启动。

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/138337

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。