kubernetes + docker + tomcat 部署web应用最新教程

作者:青山常在人不老   阅读 (1595)  |  收藏 (0)  |  点赞 (0)

摘要

很多朋友在将自己开发的应用通过kubernetes + docker 部署到集群的时候,经常会走很多弯路,遇到很多坑,作者就是在自己踏遍各个坑后写下了一系列的总结文章,本篇就是讲述如何将你的web应用通过tomcat部署到kubernetes集群中。


原文链接:kubernetes + docker + tomcat 部署web应用最新教程

目标

    通过kubernetes和docker将本地开发的webapp应用(本例使用的是Springboot maven工程)部署到集群上

操作流程

    1、将tomcat和web应用整合在一起

    2、通过docker将整合在一起的tomcat和jdk制作成docker镜像(tomcat和jdk作为一个整体的镜像一部分)

    3、通过kubernetes将docker制作好的tomcat镜像和jdk镜像部署到集群中

    4、测试部署结果

基本要求

    linux系统:centos 8

    docker + kubernetes 

    注意:没有搭建的参考我的文章进行搭建centos 8 安装 kubernetes 和 docker 最新教程 

准备:

    1、jdk 8u251.tar (linux 版 ,去oracle官方网站上下载:oracle 下载jdk官网    我选择的是jdk-8u251-linux-x64.tar.gz)

    2、tomcat8.tar (linux版,去tomcat官方网站上下载:tomcat apatch官网,我选择的是:apache-tomcat-8.5.56.tar.gz)

    3、你本地的一个java web项目(只要能在你本地tomcat中成功启动并能访问即可)

    4、mysql不管(如果你的应用需要mysql,请移步我的另外一篇文章kubernetes+docker部署mysql、tomcat应用

将web项目整合进你的tomcat中

解压tomcat,并将war包放入tomcat根目录中的\webapps文件夹中

kubernetes + docker + tomcat  部署web应用,docker 制作镜像


运行tomcat根目录中的\bin\startup.bat(如果你本地的环境为linux,则运行startup.sh)

测试应用启动情况

等启动完成后,尝试访问你的应用,如能访问,则证明该tomcat和你的应用运行正常

删除tomcat根目录中的\webapps文件夹中你刚刚方进入的war包,只保留tomcat自己解压出的应用文件

image.png

打包压缩tomcat

将tomcat根目录压缩成 apache-tomcat-8.5.56.tar 压缩文件。此时,要制作docker中镜像的tomcat就准备好了

jdk检查

检查你下载的jdk-8u251-linux-x64.tar(例如,通过oracle下载的jdk压缩文件通常解压后还是一个tar的压缩文件,我们只需要保留解压后的tar文件就可以了)

制作docker镜像

上传tar文件

首先将要制作镜像的apache-tomcat-8.5.56.tar、jdk-8u251-linux-x64.tar上传到你的docker所在的服务器上,例如我放到了如下目录下

docker 将本地应用制作成docker镜像

创建Dockerfile

在docker服务器上创建docker-jdk-tomcat文件

vi docker-jdk-tomcat

并将以下内容粘贴到上面的文件中

#基本镜像
FROM centos   
#把你上传的jdk放到docker容器里面的root目录下
ADD jdk-8u251-linux-x64.tar /root
#把你上传的Tomcat放到docker容器里面的root目录下
ADD apache-tomcat-8.5.56.tar /root
#设置环境变量
ENV JAVA_HOME /root/jdk1.8.0_251  
#设置环境变量
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  
#设置环境变量
ENV CATALINA_HOME /root/apache-tomcat-8.5.56
#设置环境变量
ENV CATALINA_BASE /root/apache-tomcat-8.5.56
#设置环境变量
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#执行startup.sh并打开日志
ENTRYPOINT /root/apache-tomcat-8.5.56/bin/startup.sh && tail -F /root/apache-tomcat-8.5.56/logs/catalina.out

上面每行都有解释,不再多说,此处需要注意的是:

1、docker-jdk-tomcat 要和上述两个tar文件在同一个目录下(不在同一个目录下请修改上面文件中的tar的路径)

2、上述文件中的内容tar的名字一定要和你自己的tar名字一致

3、环境变量一定要和你自己选的版本一致

制作tomcat-jdk镜像

在docker-jdk-tomcat所在目录执行以下命令

docker build -f docker-jdk-tomcat -t my-jdk-tomcat:v8 .

注意:

    1、docker-jdk-tomcat 为你的dockerfile名称

    2、 my-jdk-tomcat:v8 为镜像名称:标签,作用是在docker镜像中做版本标记用

    3、运行时一定不要忘了后面的那个.

    4、详细命令请参考docker官网文档

制作成功后,查看docker中的镜像列表

docker images

返回结果如下

docker 查询本地镜像列表

此时,你本地的应用已经成功成了docker中的一个镜像,此镜像包含 tomcat+jdk

kubernetes部署应用

创建命名空间(我使用的是gpf-first)

kubectl create namespace gpf-first

创建tomcat-rc.yaml,并将以下内容粘贴进入

apiVersion: v1      # 描述RC对象的版本是v1
kind: ReplicationController    # 我现在在声明RC对象
metadata:     # metadata中的是对此RC对象描述信息
  name: myweb-tomcat      # 此RC对象在gpf-first命名空间中名为myweb-tomcat-1,同一个命名空间中的命名一定是不同的
  namespace: gpf-first  # 使用gpf-first命名空间
spec:     # spec中是对RC对象的具体描述
  replicas: 1    # 我要创建5个副本,单位当然是pod
  selector:      # 选择器,用来选择对象的
    app: myweb    # 我选择了标签为app: myweb的pod
  template:     # 模版,以下用来描述创建的pod的模版
    metadata:   # 对pod模版描述的元数据
      labels:      # 给以下的东西打上标签,以让selector来选择
        app: myweb   # 给pod模版打上app: myweb这样的标签
    spec:             # 对pod模版的具体描述
      containers:         # 以下就是要放入pod模版中的容器了
      - image: docker.io/my-jdk-tomcat:v8    # 选择镜像
        name: myweb         # 容器名
        imagePullPolicy: Never  #不使用远程镜像
        resources:           # 给该容器分配的资源大小
          limits:
            cpu: "0.5"
            memory: 1Gi
        ports:         # 容器端口号
        - containerPort: 8080         
        env:          # 给该容器设置环境变量,这里就可以将mysql与我们的tomcat连接
        - name: MYSQL_SERVICE_HOST
          value: 'mysql'
        - name: MYSQL_SERVICE_PORT
          value: '3306'

注意

    1、上面内容中涉及到kubernetes yaml文件的使用,如果不熟悉,请您查询相关资料

    2、image的值指向docker中已经打好的你的应用镜像docker.io/my-jdk-tomcat:v8

在tomcat-rc.yaml所在目录执行以下命令

kubectl create -f tomcat-rc.yaml

此时,将会创建一个pod

创建tomcat-service.yaml,并将以下内容粘贴进入

apiVersion: v1
kind: Service   # 对象是service
metadata:
  name: myweb # 此对象在命名空间中的名称
  namespace: gpf-first  # 使用gpf-first命名空间
spec:
  ports:
  - name: myweb-svc  # 端口名称,Service是必须指定端口名称的
    # 重点在于三个端口的区别,容器有端口,Service有端口,node也有真实的端口号,这里我们将这三者关联起来
    port: 8080 # Service的端口号
    targetPort: 8080  # 容器暴露的端口号
    nodePort: 80  # node的真实端口号
  selector:
    app: myweb   # Service选择了标签为app: myweb的pod
  type: NodePort

在tomcat-service.yaml所在目录执行以下命令

kubectl create -f tomcat-service.yaml

此时,将会创建tomcat的服务发现(svc)

我们应该注意到,在tomcat-service.yaml文件,我们定义了对外暴露80的主机端口,因此我们可以通过以下url访问到你的tomcat中的服务

http://你的主机ip/你的应用

至此,成功完成将本地web应用制作成docker应用,并通过kubernetes部署到集群中

欣赏下成果:

kubernetes 部署自定义web应用


分类   应用工具
字数   4260

博客标签    docker 制作镜像   k8s+docker制作部署应用   docker 制作web应用镜像  

评论