构建自己的Tomcat镜像
在很多情况下,我们会不满足于官方提供的Tomcat镜像。比如官方镜像的时区为UTC时间,并不是北京时间;再比如在特定硬件环境下,jdk的随机数生成器初始化过慢问题。此时,我们就会考虑构建自己的Tomcat镜像,满足我们实际应用的需要。
构建自己的Tomcat镜像有多种方式,常用的有两种
- 在官方提供的Tomcat镜像的基础上进行构建(以官方Tomcat镜像为父镜像)。官方的Tomcat镜像已经为我们做了很多工作,我们只需要修改部分内容即可。
- 根据openjdk镜像,参考官方Tomcat镜像的Dockerfile文件进行构建。我们可以完全按照自己的需求安装和配置Tomcat。当然,通过第一种方式也能达到这个目的,这不是本文的重点。
为了更好地演示Tomcat镜像的构建步骤,本文将按照第二种方式构建我们自己的Tomcat。我们构建的依据当然是官方Tomcat镜像的Dockerfile文件,有想了解该文件的内容朋友,可以移步至我的另一篇博客:官方Tomcat镜像Dockerfile分析及镜像使用。
我们会对官方的Dockerfile进行一定的精简,去掉可有可无的指令,并添加我们自定义的指令。当然这个可有可无只是我个人认为,仅供参考。
改造后的Dockerfile文件
FROM openjdk:8-jre
MAINTAINER dfengwei@163.com
ENV JAVA_HOME /docker-java-home
ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
ENV TIME_ZONE Asia/Shanghai
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME
RUN set -x \
\
# 下载Tomcat压缩文件
&& wget -O tomcat.tar.gz 'https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-8/v8.5.16/bin/apache-tomcat-8.5.16.tar.gz' \
# 解压
&& tar -xvf tomcat.tar.gz --strip-components=1 \
# 删除供Windows系统使用的.bat文件
&& rm bin/*.bat \
# 删除Tomcat压缩文件
&& rm tomcat.tar.gz* \
\
# 更改时区
&& echo "${TIME_ZONE}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime \
\
# 处理Tomcat启动慢问题(随机数产生器初始化过慢)
&& sed -i "s#securerandom.source=file:/dev/random#securerandom.source=file:/dev/./urandom#g" $JAVA_HOME/jre/lib/security/java.security
EXPOSE 8080
CMD ["catalina.sh", "run"]
这个Dockerfile够精简了吧,里面的指令我加了注释,大家应该都能看懂。和官方的Dockerfile相比,虽然看上去是去掉了很多指令,但实际上也是完全够用了的。这里再大致列一下和官方Dockerfile的区别:
- 去掉了Tomcat Native相关组件。此组件用于支持Tomcat的APR模式,个人认为一般应用并不需要。
- 去掉了对下载的Tomcat做签名验证的相关内容。我们的Tomcat下载地址已经是官方地址。
- 增加了对时区的配置。
- 处理了Tomcat因随机数产生器初始化过慢而导致启动过慢问题。该问题可能在某些硬件条件下会出现,比如阿里云的ECS。
注意:在增加指令进行定制化改造的同时,也要适当考虑镜像的通用性。
构建镜像
进入Dockerfile所在路径,执行以下命令构造镜像(注意末尾的点不能遗漏):
$ docker build -t dfengwei/tomcat:8.5.15-jre8 .
Docker的build命令这里就不多做解释了,请自行百度或参考官方文档。构建后的镜像存于本机,只能本机使用。
命令中的-t参数用于指定该镜像的标签。标签格式一般是是:用户名/镜像名称:镜像版本号。
如果该镜像只是你本地使用,那么标签你可以随意取;但是如果你要使用DockerHub等托管服务托管该镜像,则必须使用托管服务商给你用户名作为标签的用户名,并且镜像名称和镜像版本号遵循一定的规则。官方的托管服务是DockerHub,非官方的有很多,比如阿里云的开发者平台。我将在之后的文章中介绍如何操作。
运行容器
$ docker run -d --name tomcat-test -p 8888:8080 dfengwei/tomcat:8.5.15-jre8
本容器的使用方式其实和官方的Tomcat是一样的,只是不支持Tomcat的APR模式。大家可以参考我之前的一篇博客:官方Tomcat镜像Dockerfile分析及镜像使用
构建自己的Tomcat镜像的更多相关文章
- OpenShift应用镜像构建(1) S2I tomcat 镜像定制
参考并感谢https://www.jianshu.com/p/fd3e62263046 在对接项目制作应用镜像的过程中,经常发现避免不了的是需要写Dockerfile,(当然另外一种方式是直接run一 ...
- docker dockerfile构建自己的tomcat镜像
文件 1.apache-tomcat-8.5.24.tar.gz, jdk-8u151-linux-x64.tar.gz Dockerfile文件: FROM centosWORKDIR /usrCO ...
- 官方Tomcat镜像Dockerfile分析及镜像使用
官方Tomcat镜像 地址:https://hub.docker.com/_/tomcat/ 镜像的Full Description中,我们可以得到许多信息,这里简单介绍下: Supported ta ...
- 用Docker构建Tomcat镜像
构建tomcat镜像 创建工作目录 [root@elk-node2 tomcat]# mkdir tomcat [root@elk-node2 tomcat]# cd tomcat [root@elk ...
- Dockerfile书写介绍及构建ssh镜像、tomcat镜像、nginx镜像
=================================================================================================== ...
- dockerfile构建Tomcat镜像
dockerfile构建Tomcat镜像 一.镜像分层概念 二.制作tomcat镜像 2.1.创建分层目录 [root@node2 ~]# mkdir /app/{web/{nginx,tomcat, ...
- docker构建tomcat镜像
下载centos镜像 # docker pull daocloud.io/centos:7 [root@localhost ~]# docker pull daocloud.io/centos: : ...
- 使用Dockerfile创建一个tomcat镜像,并运行一个简单war包
docker已经看了有一段时间了,对镜像和容器也有了一个大致了解,参考书上的例子制作一个tomcat镜像,并简单运行一个HelloWorld.war 1.首先下载linux环境的tomcat和jdk, ...
- 使用Dockerfile制作JDK+tomcat镜像
1.准备好jdk和tomcatapache-tomcat-8.5.32.tar.gzjdk-8u181-linux-x64.tar.gz 注意:a.jdk和tomcat记得从官网下载,否则制作出来的镜 ...
随机推荐
- Linux 库文件详解
转自: http://www.cppblog.com/deane/articles/165216.html http://blog.sciencenet.cn/blog-1225851-904348. ...
- 全景技术大揭秘,市场核心早洞悉——VR全景加盟
未来已来,未来已见.2017是3D全景创业的天时,全景行业逐步走向成熟.全景智慧城市专注vr全景6年,技术国内遥遥领先.全景智慧城市市场总监常诚,透漏3D全景技术和市场的核心. 拍摄全景必备的设备:单 ...
- Java IO流之【缓冲流和文件流复制文件对比】
与文件流相比,缓冲流复制文件更快 代码: package Homework; import java.io.BufferedOutputStream; import java.io.File; imp ...
- leetcode算法题(JavaScript实现)
题外话 刷了一段时间的codewars的JavaScript题目之后,它给我最大的感受就是,会帮助你迅速的提升你希望练习的语言的API的熟悉程度,Array对象.String对象等原生方法,构造函数. ...
- JavaScript实现单击全选 ,再次点击取消全选
以下为实现思路,已测试,供参考 var allSet = document.getElementById('allSet');//获取全选按钮元素 var a = allSe ...
- ViewModel从未如此清爽 - 轻量级WPF MVVM框架Stylet
Stylet是我最近发现的一个WPF MVVM框架, 在博客园上搜了一下, 相关的文章基本没有, 所以写了这个入门的文章推荐给大家. Stylet是受Caliburn Micro项目的启发, 所以借鉴 ...
- 软件测试基础(软件测试分类和工具组)firebug、firepath的安装
白盒测试:需要了解内部结构和代码 黑盒测试:不关心内部结构和代码 灰盒测试:介于白盒黑盒之间 静态测试:测试时不执行被测试软件 动态测试:测试时执行被测试软件 单元测试:测试软件的单元模块 集成测试: ...
- (转)关于BigDecimal 转化字符串toPlainString()和toString()的区别
对于 BigDecimal b ; (b=(0.4321)^ 20)String s = b.toPlainString() ;System.out.println(s) ; 输出为:0.0 ...
- 利用Excel做一些简单的数据分析
先来几个原始数据的截图,如下所示: 示例图就举一个吧,因为这些数据量还挺大的,大概的总结了一下,这下列这几栏中不合规范的数据占比很大: (1)民族(经分析,在此表中所涉及到的民族分别为:汉族,满族,蒙 ...
- for循环 重点题
1.冒泡排序 (特别重要): <script type="text/javascript"> var attr=Array(); for(var i=0; i< ...