java - 在 Kubernetes 上的 Tomcat 中部署 WAR

标签 java docker tomcat kubernetes

我需要创建一个 Multibranch Jenkins 作业以在 Tomcat 中部署一个应该在 Kubernetes 上运行的 .war 文件。基本上,我需要以下内容:

  1. 一种在 Kubernetes 平台上安装 Tomcat 的方法。
  2. 在这个新安装的 Tomcat 上部署我的 war 文件。

我需要利用 Dockerfile 来实现这一点。

PS:我对 Kubernetes 和 Docker 非常陌生,也需要基本的细节。我尝试寻找教程,但找不到任何令人满意的文章。

任何帮助都将受到高度赞赏。

最佳答案

Docker 部分

您可以使用 tomcat docker official image

在您的Dockerfile只需将您的 war 文件复制到 /usr/local/tomcat/webapps/目录:

FROM tomcat

COPY app.war /usr/local/tomcat/webapps/

构建它:

docker build --no-cache -t <REGISTRY>/<IMAGE>:<TAG> .

构建镜像后,将其推送到您选择的 Docker 注册表中。

docker push <REGISTRY>/<IMAGE>:<TAG>

Kubernetes 部分

1) 这是一个简单的 kubernetes Deployment为您的 tomcat 图像

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  labels:
    app: tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: <REGISTRY>/<IMAGE>:<TAG>
        ports:
        - containerPort: 8080

此部署定义将基于您的 tomcat 镜像创建一个 pod。

放到yml文件中执行kubectl create -f yourfile.yml创建它。

2) 创建一个 Service :

kind: Service
apiVersion: v1
metadata:
  name: tomcat-service
spec:
  selector:
    app: tomcat
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

您现在可以使用 http://tomcat-service.your-namespace/app 访问集群内的 pod (因为你的 war 被称为 app.war )

3) 如果您有 Ingress controller ,您可以创建一个 Ingress ressource将应用程序暴露在集群之外:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /app
        backend:
          serviceName: tomcat-service
          servicePort: 80

现在使用 http://ingress-controller-ip/app 访问应用程序

关于java - 在 Kubernetes 上的 Tomcat 中部署 WAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54341432/

相关文章:

java - 如何从单独的 jar 文件运行 jar 文件?

rest - 它如何将各种微服务与Docker连接起来?

tomcat - Vaadin 应用程序创建导致内存泄漏的线程

tomcat - Puppet:如何使用 Puppet list 配置 Tomcat 数据源?

java - 不同数组之间切换的算子,内部更精准

java - MATLAB Compiler Runtime (MCR) 中的 JVM 有什么作用?

java - gwtbootstrap3 选择 - 添加选项

php - 如何弄清楚是什么减慢了 docker 的速度?

mysql - 如何在 Docker 容器中使用模式初始化 MySQL 数据库?

java - 使用 hibernate3 和 struts2