Docker —— 使用 Dockerfile 制作 Jdk + Tomcat 镜像
一、准备好Jdk和Tomcat
apache-tomcat-8.5.50.tar.gz
jdk-8u212-linux-x64.tar.gz
注意:
- Jdk 和 Tomcat 记得从官网下载,否则制作出来的镜像容易出现不兼容问题。
jdk1.8下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
tomcat8下载:https://tomcat.apache.org/download-80.cgi
- 准备修改好的 server.xml (修改连接和线程数),制作镜像时覆盖tomcat中的;

- apache-tomcat-8.5.50.tar.gz、jdk-8u212-linux-x64.tar.gz、Dockerfile放在同一目录

二、编写Dockerfile
内容如下:
# 指定操作的镜像
FROM centos:7 # 维护者信息
MAINTAINER caoweixiong # 将 jdk 和 tomcat 添加到镜像centos的/usr/local/目录下
ADD jdk-8u212-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.50.tar.gz /usr/local/ # 覆盖相关文件
COPY server.xml /usr/local/apache-tomcat-8.5.50/conf/ # 添加环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_212
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.50
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
ENV TZ="Asia/Shanghai"
ENV JAVA_OPTS="\
-server \
-Xms3g \
-Xmx3g \
-Xmn512m \
-Xss512K \
-Dfile.encoding=UTF-8 \
-verbose:gc \
-XX:+UseConcMarkSweepGC \
-XX:MaxTenuringThreshold=10 \
-XX:+ExplicitGCInvokesConcurrent \
-XX:GCTimeRatio=19 \
-XX:+UseParNewGC \
-XX:+UseCMSCompactAtFullCollection \
-XX:CMSFullGCsBeforeCompaction=10 \
-XX:+CMSClassUnloadingEnabled \
-XX:+CMSParallelRemarkEnabled \
-XX:CMSInitiatingOccupancyFraction=50 \
-Xnoclassgc \
-XX:SoftRefLRUPolicyMSPerMB=0" # 暴露8080端口
EXPOSE 8080 # 容器启动时运行tomcat
CMD /usr/local/apache-tomcat-8.5.50/bin/catalina.sh run
注:环境变量【JAVA_OPTS】也可在容器启动时指定:-e JAVA_OPTS='-server -Dfile.encoding=UTF-8 -Xms2g -Xmx2g -Xmn512m -Xss512K ..............'
三、制作镜像
执行 docker build 制作镜像:
docker build -t tomcat-8.5.50:v1 .
说明:
-t 设置tag名称, 命名规则registry/image:tag(若不添加版本号,默认latest)
. 表示使用当前目录下的Dockerfile文件(注意语句后面有一个点),如需指定目录,则用 -f

执行 docker images 查看构建的镜像:

四、启动tomcat容器
# 挂载代码
docker run -d --name mytomcat -v /server/webapps:/usr/local/tomcat/webapps/ -e TZ="Asia/Shanghai" --privileged=true -p 8080:8080 tomcat-8.5.50:v1
# 挂载日志
docker run -d -e TZ="Asia/Shanghai" --name masl -p 8081:8080 -v /home/mppay/logs/masl:/home/mppay/logs/masl 10.0.29.104:5000/masl:17
# 挂载配置文件catalina.sh(调整内存)
docker run -d --name masl -p 8081:8080 -e TZ="Asia/Shanghai" -v /usr/local/tomcat/bin/catalina.sh:/usr/local/apache-tomcat-8.5.50/bin/catalina.sh 10.0.29.104:5000/masl:sit-17
# 挂载配置文件server.xml(调整端口和线程数)
docker run -d --name masl -p 8081:8080 -e TZ="Asia/Shanghai" -v /usr/local/tomcat/conf/server.xml:/usr/local/apache-tomcat-8.5.50/conf/server.xml 10.0.29.104:5000/masl:sit-17
说明:
* -d 后台运行
* --name mytomcat 容器名称
* -v /server/webapps:/usr/local/tomcat/webapps/ 挂载当前项目的运行目录到tomcat下的webapps
* -e TZ="Asia/Shanghai" 设置时区
* --privileged=true 设置拥有容器中的真正的root权限
* -p 8080:8080 映射端口(宿主机port : 容器port)
* tomcat-8.5.50:v1 镜像的名称

执行 docker ps 查看进程:

五、访问验证
输入地址:http://ip:8080

Docker —— 使用 Dockerfile 制作 Jdk + Tomcat 镜像的更多相关文章
- 使用Dockerfile制作JDK+tomcat镜像
1.准备好jdk和tomcatapache-tomcat-8.5.32.tar.gzjdk-8u181-linux-x64.tar.gz 注意:a.jdk和tomcat记得从官网下载,否则制作出来的镜 ...
- docker通过dockerfile构建JDK最小镜像,Docker导出导入镜像
docker通过dockerfile构建JDK最小镜像,Docker导出导入镜像 一.docker通过dockerfile构建JDK最小镜像 1.1 下载JRE 1.2 解压JRE,删除相关不需要文件 ...
- Docker之dockerfile制作jdk镜像
目的: Dockerfile简介 Dockerfile制作jdk镜像 Dockerfile简介 了解dockerfile之前要先了解Docker基本概念和使用可参考:https://www.cnblo ...
- docker制作jdk+tomcat镜像
docker部署TOMCAT项目 一.内核升级 [root@test01 ~]# uname -r #内核查看确认 2.6.32-696.16.1.el6.x86_64 [root@test01 ...
- 使用Dockerfile创建一个tomcat镜像,并运行一个简单war包
docker已经看了有一段时间了,对镜像和容器也有了一个大致了解,参考书上的例子制作一个tomcat镜像,并简单运行一个HelloWorld.war 1.首先下载linux环境的tomcat和jdk, ...
- Docker入门系列之三:如何将dockerfile制作好的镜像发布到Docker hub上
这个系列的前两篇文章,我们已经把我们的应用成功地在Docker里通过nginx运行了起来,并且用dockerfile里制作好了一个镜像. Docker入门系列之一:在一个Docker容器里运行指定的w ...
- Docker 0x05: Dockerfile制作镜像
目录 Dockerfile制作镜像 一句话什么是dockerfile dockerfile脚本指令 小结 Dockerfile制作镜像 dockerfile 可以是制作自己镜像的脚本文件,按照这个脚本 ...
- docker commit 制作自定义tomcat镜像
官网下载的tomcat一般存在漏洞,在生产环境中一般是自己下载jdk和tomcat制作成一个新的镜像使用 1.将jdk和tomcat上传 2.生成 c3 容器 3.将jdk和tomcat拷贝到c3容器 ...
- 基于alpine用dockerfile创建的tomcat镜像
1.下载alpine镜像 [root@docker43 ~]# docker pull alpine Using default tag: latest Trying to pull reposito ...
随机推荐
- 通过lms.samples熟悉lms微服务框架的使用
经过一段时间的开发与测试,终于发布了Lms框架的第一个正式版本(1.0.0版本),并给出了lms框架的样例项目lms.samples.本文通过对lms.samples的介绍,简述如何通过lms框架快速 ...
- nginx 本地配置(解决跨域问题)
前端做跨域本身就是扯淡的事情.后台人员不配合说什么都是白搭.索性整理了一下心得,(可以直接部署自配置)发不多说上代码: 1 #user nobody; 2 worker_processes 1; 3 ...
- Linux(六):系统运维常用命令
实际的生产环境下,不论是研发还是运维,或多或少的得面对在linux上定位问题这个关卡,这里介绍一下linux环境下一些状态查看常用的命令. 系统资源监控 总体资源占用情况查看 命令:top 像wind ...
- Dynamics CRM产生公共签名,避免每次插件换环境重新输入签名密钥账号密码
在Dynamcs CRM项目维护交接过程中,我们经常会使用其他合作者的插件代码.但是每次拿到别人代码编译的时候插件密钥都要重新输入密钥的账号密码.而且如果密钥都是的话比较麻烦.所以这里就针对这个问题做 ...
- 关于MySQL日志,我与阿里P9都聊了些啥?
写在前面 周末,我与阿里P9资深技术专家(这里就不说名字了),聊起了MySQL这个话题,为啥会聊这个呢?因为他看到我出版了一部<MySQL技术大全:开发.优化与运维实战>,对书籍的评价也是 ...
- 【Prolog - 2.0 基础应用】
[术语统一 terms unify] 两者统一,只需满足下面两条件之一 1.原本就是相同的 2.包含变量,这些变量可以用术语统一实例化,从而得到相等的术语 mia和mia是统一的,42和42是统一的, ...
- 如何自己设计一个类似dubbo的rpc框架?
(1)上来你的服务就得去注册中心注册吧,你是不是得有个注册中心,保留各个服务的信息,可以用zookeeper来做,对吧 (2)然后你的消费者需要去注册中心拿对应的服务信息吧,对吧,而且每个服务可能会存 ...
- 死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...
- Day16_91_通过反射机制获取父类和父接口
通过反射机制获取父类和父接口 * 代码: import java.net.InterfaceAddress; public class ReflectTest14 { public static vo ...
- KMP(梅开三度之数据结构详解版
前言 KMP算法是一种字符串匹配算法,其重中之重是next数组的构建,其代码的简洁与神奇使其广受关注. 但不难发现,acm中学到的KMP和数据结构里面学到的KMP并不一样o(︶︿︶)o 之前我写过ac ...