docker k8s 集群部署tomcat,使用一个镜像,增加镜像的复用性。

栏目: 服务器 · 发布时间: 7年前

内容简介:写在前面,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项目了。

docker k8s 集群部署tomcat,使用一个镜像,增加镜像的复用性。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python for Data Analysis

Python for Data Analysis

Wes McKinney / O'Reilly Media / 2012-11-1 / USD 39.99

Finding great data analysts is difficult. Despite the explosive growth of data in industries ranging from manufacturing and retail to high technology, finance, and healthcare, learning and accessing d......一起来看看 《Python for Data Analysis》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器