内容简介:写在前面,k8s集群均已经搭建好,具体步骤可以查看前面文章。编写Dockerfile文件,目的创建一个可以公用的image,每次部署tomcat直接使用该镜像不用每次都进行build镜像。需要用到配置文件内容如下:
写在前面,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_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启动脚本,
# 内容很简单,就两行,第一行是启动tomcat使用 sh /usr/local/tomcat/bin/startup.sh;
# 容器要求必须要有前台执行的进程的容器才不会退出,所以第二行随便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"]
需要用到配置文件内容如下:
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镜像就可以了。
创建一个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:
# 需要仔细说明的地方,这里我们创建了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: 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项目了。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。