docker k8s 集群部署tomcat,使用一个镜像,增加镜像的复用性。
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,写在前面,k8s集群均已经搭建好,具体步骤可以查看前面文章。编写Dockerfile文件,目的创建一个可以公用的image,每次部署tomcat直接使用该镜像不用每次都进行build镜像。# 开始本来
千家信息网最后更新 2025年12月02日docker k8s 集群部署tomcat,使用一个镜像,增加镜像的复用性。
写在前面,k8s集群均已经搭建好,具体步骤可以查看前面文章。
编写Dockerfile文件,目的创建一个可以公用的image,每次部署tomcat直接使用该镜像不用每次都进行build镜像。
# 开始本来想使用tomcat的官方镜像,但是无奈官方镜像的系统用的都是diban 8的系统,因为我要做日志切割,需要安装cronolog软件,# 翻篇google、百度并没有找到如何使用apt-get 安装,无奈只能使用源码安装,但是安装过程需要gcc和make的支持# 使用diban 8的如果不对apt-get update 操作,安装不上,但是由于系统落后原因,导致官方或163或清华的源都不支持了。最后无奈使用了ubuntu 14的镜像。FROM ubuntu:14.04.5# tomcat安装目录ENV TOMCAT_HOME /usr/local/tomcat# 这里是放server.xml的文件的目录,这个目录需要跟tomcat/conf文件夹下的server.xml做一个超链接,为什么呢? # 因为我要使用configmap的方式对配置文件挂载,如果直接挂载到conf目录下,那么目录下的其它文件就都没了。所以我们关在的时候挂载新创建的目录,然后做一个超链接映射。ENV SERVER_XML /configfile# 配置jdk环境ENV JAVA_HOME /opt/jdk1.7.0_21ENV JRE_HOME $JAVA_HOME/jreENV JAVA_BIN $JAVA_HOME/binENV CLASSPATH $CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/libENV PATH $TOMCAT_HOME/bin:$JAVA_BIN:$JAVA_HOME/jre/bin:$PATH:$HOME/bin# 增加jdk压缩包到/opt目录下ADD jdk-7u21-linux-x64.tar.gz /optADD apache-tomcat-7.0.77.tar.gz /usr/localRUN ADD ./catalina.sh $TOMCAT_HOME/bin/ADD ./cronolog-1.6.2.tar.gz /opt/# 这个是自己手动编写的tomcat启动脚本,# 内容很简单,就两行,第一行是启动tomcat使用 sh /usr/local/tomcat/bin/startup.sh;# 容器要求必须要有前台执行的进程的容器才不会退出,所以第二行随便tail -f 了一个日志即可。ADD ./start.sh $TOMCAT_HOME/bin/WORKDIR /opt/cronolog-1.6.2RUN mv /usr/local/apache-tomcat-7.0.77 /usr/local/tomcat && chmod a+x /usr/local/tomcat/bin/*.sh && \ apt-get update -y && apt-get install gcc make -y && \ ./configure && make && make install && chmod a+x $TOMCAT_HOME/bin/start.sh $TOMCAT_HOME/bin/catalina.sh && \ rm -rf $TOMCAT_HOME/webapps/* && rm -rf $TOMCAT_HOME/conf/server.xml && mkdir $SERVER_XML && \ touch $SERVER_XML/server.xml && ln -s $SERVER_XML/server.xml $TOMCAT_HOME/conf/server.xmlEXPOSE 8080ENTRYPOINT ["/bin/sh", "/usr/local/tomcat/bin/start.sh"]
需要用到配置文件内容如下:
start.sh
#!/bin/shsh /usr/local/tomcat/bin/startup.shtail -f /usr/local/tomcat/bin/catalina.sh
catalina.sh
################以上与原有tomcat默认配置文件一致################421 #touch "$CATALINA_OUT"422 if [ "$1" = "-security" ] ; then423 if [ $have_tty -eq 1 ]; then424 echo "Using Security Manager"425 fi426 shift427 eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \428 -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \429 -classpath "\"$CLASSPATH\"" \430 -Djava.security.manager \431 -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \432 -Dcatalina.base="\"$CATALINA_BASE\"" \433 -Dcatalina.home="\"$CATALINA_HOME\"" \434 -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \435 org.apache.catalina.startup.Bootstrap "$@" start \436 >> "$CATALINA_OUT" 2>&1 "&"437 438 else439 eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \440 -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \441 -classpath "\"$CLASSPATH\"" \442 -Dcatalina.base="\"$CATALINA_BASE\"" \443 -Dcatalina.home="\"$CATALINA_HOME\"" \444 -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \445 org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &446 447 fi################以下与原有tomcat默认配置文件一致################
下面直接build镜像就可以了。
创建一个configmap用于存放tomcat的server.xml文件。
kubectl create configmap cm-server.xml --from-file='server.xml的绝对路径'
编写k8s的yaml文件
apiVersion: apps/v1kind: Deploymentmetadata: name: dubbo-admin labels: app: dubbo-adminspec: replicas: 1 selector: matchLabels: app: dubbo-admin template: metadata: labels: app: dubbo-admin spec: # 需要仔细说明的地方,这里我们创建了3个volume,分别存放tomcat的log、java项目代码和一个使用configmap形式存放的tomcat配置文件(server.xml) volumes: - name: "code-war" hostPath: path: "/Disk/data/tomcat/dubbo-admin/code/" - name: "tomcat-log" hostPath: path: "/Disk/data/tomcat/dubbo-admin/log/" - name: "serverxml" configMap: name: tomcat-dubbo-admin-server.xml items: - key: server.xml path: server.xml containers: - name: dubbo-admin # 容器使用刚刚build过的镜像 image: fushuitong/tomcat:jdk7u21-tomcat7.0.77-cronolog1.6.2 ports: - containerPort: 8080 #挂载3个volume,挂载目录如下 volumeMounts: - name: code-war mountPath: /usr/local/tomcat/webapps - name: tomcat-log mountPath: /usr/local/tomcat/logs - name: serverxml mountPath: /configfile
直接创建这个Deployment即可。
创建一个service,把tomcat的端口应道node上,以供外面访问,如果tomcat前面还有nginx,可以直接映射到clusterIP.使用nginx进行转发即可。
变了service的yaml文件
apiVersion: v1kind: Servicemetadata: name: dubbo-adminspec: ports: - port: 8080 nodePort: 32333 targetPort: dubbo-admin protocol: TCP selector: app: dubbo-admin type: NodePort
最后通过访问任意node的ip的32333端口就能访问到对应的tomca项目了。
文件
目录
镜像
配置
官方
容器
无奈
系统
一致
内容
我要
日志
端口
链接
项目
支持
集群
不对
一行
不用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
石家庄众人互联网科技有限公司
内蒙古态势推演系统软件开发
药物和天然产物数据库
四六级报考软件开发
移动公司数据库安全性
南京易租网络技术有限公司
英语博客网络安全
ftp服务器 中文
哈尔滨网络安全案件
深圳web前端软件开发哪家专业
hge装备数据库
物联网平台软件开发合同
经纬恒润软件开发面试
服务器活动方案
oracle数据库io
visio 软件开发模板
在m个中随机取n个数据库
mpacc数据库
php 循环读取数据库
和网络技术有关的职业
车场数据采集服务器
hfss服务器显卡
软件开发工程师考研的好处
趣味网络安全知识
哈工大网络安全求职
党政会议网络安全内容
服务器能接两个网络吗
高青erp软件开发咨询
选择计算机网络技术的认知
点击安装数据库没有反应