#背景

有一个轻量级J2EE开发的应用程序,以前是以集群的方式跑在虚拟主机的tocmat上的。现在需要将其应用容器化,并运行在kubernates环境中。

要实现该目标,需要解决以下几个问题:

1.工程的容器化。(包括工程及tomact制作成镜像,并结合起来。)

2.容器化的应用集群部署。

3.将集群服务反向代理为统一访问入口。

该文档对以上问题的解决方式如下:

1.将tomcat与工程分开为独立镜像,工程镜像为initContainers方式附属在tomcat容器上。这样当工程更新时,只需要更新工程镜像本身就好了。

2.使用Deploymen对容器应用的集群部署。

3.使用Service对集群进行反向代理。(使用反向代理的描述不太准确,请客官不要太纠结于这个细节,明白我要表示的浅显的意思就可以了。)

下面是具体的实现步骤

实现步骤

制作tomcat镜像

大家都知道,在docker的官方镜像中就有tomcat的官方镜像,我们可以直接使用

docker pull tomcat:latest#或具体的版本号

命令就要以获取,但基本镜像在使用的时候,根据实际需要,需要做一些简单的改造,这个根据实际的需求来。以下是我基于tocmat的官方镜像进行的一些配置修改的Dockerfile:

FROM tomcat:latest

MAINTAINER doyoung<11790379@qq.com>

ARG DOCUMENT_PATH

ARG UPLOAD_PATH

RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN echo "Asia/Shanghai" >> /etc/timezone

RUN rm /usr/local/tomcat/bin/catalina.sh

ADD catalina.sh /usr/local/tomcat/bin/

RUN chmod +x /usr/local/tomcat/bin/catalina.sh

RUN rm /usr/local/tomcat/conf/logging.properties

ADD logging.properties /usr/local/tomcat/conf/

WORKDIR /usr/local/tomcat/webapps/

RUN rm /usr/local/tomcat/conf/server.xml

ADD server.xml /usr/local/tomcat/conf/

RUN rm /usr/local/tomcat/conf/web.xml

ADD web.xml /usr/local/tomcat/conf/

VOLUME $DOCUMENT_PATH

VOLUME $UPLOAD_PATH

EXPOSE 8080

EXPOSE 443

然后通过简单的命令就可以生成一个自定义的tomcat镜像了。

docker build -t going/tomcat:latest --build-arg DOCUMENT_PATH=/root/project/go-nifty/document --build-arg UPLOAD_PATH=/root/project/go-nifty/upload .

生成工程镜像

这个只需要使用各种方式,将工程生成war包,然后使用最小的镜像将工程复制到镜像中即可,以下工程生成镜像的Dockerfile

FROM busybox:latest

MAINTAINER doyoung

ADD ./build/go-nifty.war ./

通过docker命令生成工程镜像

docker build -t going/go-nifty:latest -f DockerfileForQuestion .

部署工程

创建一个xx-deplyment.yaml文件,编辑如下:

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

name: go-nifty-web-deployment

namespace: default

spec:

replicas: 2

selector:

matchLabels:

tier: go-nifty-web

template:

metadata:

labels:

tier: go-nifty-web

spec:

initContainers:

- image: going/go-nifty:latest

imagePullPolicy: IfNotPresent

name: war

command: ["cp", "/go-nifty.war", "/app"]

volumeMounts:

- mountPath: /app

name: app-volume

containers:

- name: go-nifty-web-containers

image: going/tomcat:v1

imagePullPolicy: IfNotPresent

ports:

- containerPort: 8080

- containerPort: 443

volumeMounts:

- mountPath: /usr/local/tomcat/webapps

name: app-volume

- mountPath: /root/project/go-nifty/document

name: document

- mountPath: /root/project/go-nifty/upload

name: upload

- mountPath: /usr/local/tomcat/logs

name: logs

volumes:

- name: app-volume

emptyDir: {}

参照以上创建好deployment配置文件以后,就可用使用命令,部署应用了。

kubectl create -f xx-deployment.ymal

创建服务

创建一个xx-service.ymal文件,编辑如下:

apiVersion: v1

kind: Service

metadata:

name: go-nifty-web-service

namespace: default

spec:

type: NodePort

ports:

- port: 80

targetPort: 8080

name: go-nifty-web-port

nodePort: 80

- port: 443

targetPort: 443

name: go-nifty-web-https-port

nodePort: 443

selector:

tier: go-nifty-web

通过以上的service配置文件,就可以将应用的服务开放出来了。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐