我需要创建一个 Multibranch Jenkins 作业以在 Tomcat 中部署一个应该在 Kubernetes 上运行的 .war 文件。基本上,我需要以下内容:
- 一种在 Kubernetes 平台上安装 Tomcat 的方法。
- 在这个新安装的 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/