溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

docker k8s 集群部署tomcat,使用一個鏡像,增加鏡像的復用性。

發(fā)布時間:2020-08-28 03:09:50 來源:網(wǎng)絡 閱讀:4375 作者:xinsir999 欄目:大數(shù)據(jù)

寫在前面,k8s集群均已經(jīng)搭建好,具體步驟可以查看前面文章。


編寫Dockerfile文件,目的創(chuàng)建一個可以公用的image,每次部署tomcat直接使用該鏡像不用每次都進行build鏡像。

#?開始本來想使用tomcat的官方鏡像,但是無奈官方鏡像的系統(tǒng)用的都是diban?8的系統(tǒng),因為我要做日志切割,需要安裝cronolog軟件,
#?翻篇google、百度并沒有找到如何使用apt-get?安裝,無奈只能使用源碼安裝,但是安裝過程需要gcc和make的支持
#?使用diban?8的如果不對apt-get?update?操作,安裝不上,但是由于系統(tǒng)落后原因,導致官方或163或清華的源都不支持了。最后無奈使用了ubuntu?14的鏡像。
FROM?ubuntu:14.04.5

#?tomcat安裝目錄
ENV?TOMCAT_HOME?/usr/local/tomcat
#?這里是放server.xml的文件的目錄,這個目錄需要跟tomcat/conf文件夾下的server.xml做一個超鏈接,為什么呢??
#?因為我要使用configmap的方式對配置文件掛載,如果直接掛載到conf目錄下,那么目錄下的其它文件就都沒了。所以我們關(guān)在的時候掛載新創(chuàng)建的目錄,然后做一個超鏈接映射。
ENV?SERVER_XML?/configfile
#?配置jdk環(huán)境
ENV?JAVA_HOME?/opt/jdk1.7.0_21
ENV?JRE_HOME?$JAVA_HOME/jre
ENV?JAVA_BIN?$JAVA_HOME/bin
ENV?CLASSPATH?$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
ENV?PATH?$TOMCAT_HOME/bin:$JAVA_BIN:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

#?增加jdk壓縮包到/opt目錄下
ADD?jdk-7u21-linux-x64.tar.gz?/opt
ADD?apache-tomcat-7.0.77.tar.gz??/usr/local

RUN?
ADD?./catalina.sh?$TOMCAT_HOME/bin/
ADD?./cronolog-1.6.2.tar.gz?/opt/
#?這個是自己手動編寫的tomcat啟動腳本,
#?內(nèi)容很簡單,就兩行,第一行是啟動tomcat使用?sh?/usr/local/tomcat/bin/startup.sh;
#?容器要求必須要有前臺執(zhí)行的進程的容器才不會退出,所以第二行隨便tail?-f?了一個日志即可。
ADD?./start.sh?$TOMCAT_HOME/bin/

WORKDIR?/opt/cronolog-1.6.2
RUN?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.xml
EXPOSE?8080
ENTRYPOINT?["/bin/sh",?"/usr/local/tomcat/bin/start.sh"]


需要用到配置文件內(nèi)容如下:

?start.sh?

#!/bin/sh
sh?/usr/local/tomcat/bin/startup.sh
tail?-f?/usr/local/tomcat/bin/catalina.sh

catalina.sh

################以上與原有tomcat默認配置文件一致################
421???#touch?"$CATALINA_OUT"
422???if?[?"$1"?=?"-security"?]?;?then
423?????if?[?$have_tty?-eq?1?];?then
424???????echo?"Using?Security?Manager"
425?????fi
426?????shift
427?????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???else
439?????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鏡像就可以了。


創(chuàng)建一個configmap用于存放tomcat的server.xml文件。

kubectl?create?configmap?cm-server.xml?--from-file=‘server.xml的絕對路徑’

編寫k8s的yaml文件

apiVersion:?apps/v1
kind:?Deployment
metadata:
??name:?dubbo-admin
??labels:
????app:?dubbo-admin
spec:
??replicas:?1
??selector:
????matchLabels:
??????app:?dubbo-admin
??template:
????metadata:
??????labels:
????????app:?dubbo-admin
????spec:
??????#?需要仔細說明的地方,這里我們創(chuàng)建了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

直接創(chuàng)建這個Deployment即可。


創(chuàng)建一個service,把tomcat的端口應道node上,以供外面訪問,如果tomcat前面還有nginx,可以直接映射到clusterIP.使用nginx進行轉(zhuǎn)發(fā)即可。

變了service的yaml文件

apiVersion:?v1
kind:?Service
metadata:
??name:?dubbo-admin
spec:
??ports:
??-?port:?8080
????nodePort:?32333
????targetPort:?dubbo-admin
????protocol:?TCP
??selector:
????app:?dubbo-admin
??type:?NodePort

最后通過訪問任意node的ip的32333端口就能訪問到對應的tomca項目了。


docker k8s 集群部署tomcat,使用一個鏡像,增加鏡像的復用性。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI