自定义tomcat业务镜像并配置nginx反向代理
一、自定义Tomcat业务镜像
1.1软件包及镜像准备
基于官方提供的centos、ubuntu、openEuler、alpine等基础镜像构建JDK(Java环境),然后再基于自定义的JDK镜像构建出业务需要的tomcat镜像。
1 [root@localhost tomcat]# cd /dockerfile/web/tomcat
2 [root@localhost tomcat]# wget https://repo.huaweicloud.com/java/jdk/11.0.2+9/jdk-11.0.2_linux-x64_bin.tar.gz
3 [root@localhost tomcat]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.96/bin/apache-tomcat-9.0.96.tar.gz
#拉取openEuler镜像
[root@localhost tomcat]# docker pull openeuler/openeuler:24.03
编写脚本:手动指定 jdk 安装目录,把 java 命令加入系统命令路径,导出环境变量,供 tomcat 这类 Java 程序调用 JDK。
[root@localhost tomcat]# cat java.sh
1 JAVA_HOME=/usr/local/jdk
2 PATH=$JAVA_HOME/bin:$PATH
3 CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
4 export JAVA_HOME PATH CLASSPATH
基于 openEuler24.03 构建镜像,内置 JDK11 + Tomcat9,制作 tomcat 运行容器镜像。
[root@localhost tomcat]# cat dockerfile
1 FROM openeuler/openeuler:24.03
2 LABEL maintainer="jungle jungle@qq.com"
3 RUN yum install -y gcc pcre-devel zlib-devel openssl-devel shadow-utils
4 ADD jdk-11.0.2_linux-x64_bin.tar.gz /usr/local/src
5 RUN ln -s /usr/local/src/jdk-11.0.2/ /usr/local/jdk
6 ADD java.sh /etc/profile.d/
7 ENV JAVA_HOME=/usr/local/jdk
8 ENV PATH=$JAVA_HOME/bin:$PATH
9 ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
10 ADD apache-tomcat-9.0.96.tar.gz /usr/local/src
11 RUN ln -s /usr/local/src/apache-tomcat-9.0.96 /usr/local/tomcat
12 EXPOSE 8080
13 CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
编写一个构建镜像脚本
[root@localhost tomcat]# cat build-command.sh
1 #!/bin/bash
2 docker build -t tomcat:base .
[root@localhost tomcat]# docker run -d -P tomcat:base
[root@localhost tomcat]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1117266c49e8 tomcat:base "/usr/local/tomcat/b…" 3 minutes ago Up 3 minutes 0.0.0.0:32768->8080/tcp, [::]:32768->8080/tcp mystifying_goldberg
2.2定义tomcat业务镜像
[root@localhost tomcat-appv1]# cat index.jsp
<html>
<head><title>Hello World</title><meta charset="UTF-8"></head>
<body>
<p style="font-size:40px;font-weight:bold;">Hello World!💗</p>
<%
out.println("Your IP address is " + request.getRemoteAddr());
%>
</body>
</html>
[root@localhost tomcat-appv1]# cat dockerfile
FROM tomcat:base
LABEL maintainer="jungle jungle@qq.com"
ADD index.jsp /usr/local/tomcat/webapps/ROOT/index.jsp
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
[root@localhost tomcat-appv1]# cat build-command.sh
#!/bin/bash
docker build -t tomcat:appv1 .
[root@localhost tomcat-appv1]# bash build-command.sh
[root@localhost tomcat-appv1]# docker run -d -P tomcat:appv1
ba625d1d591f703b84e95e8efb78bc522cafd0039a6ec3d476ae71e48e7ad940
[root@localhost tomcat-appv1]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba625d1d591f tomcat:appv1 "/usr/local/tomcat/b…" 1 second ago Up 1 second 0.0.0.0:32769->8080/tcp, [::]:32769->8080/tcp keen_lichterman
二、配置nginx反向代理
在同一个宿主机上的容器之间可以通过自定义的容器名称相互访问,比如一个业务前端静态页面使用nginx,动态页面使用tomcat,由于容器在启动的时候内部的IP地址是DHCP随机分配,所以如果通过内部访问的话,自定义名称是相对比较固定的。
#运行tomcat容器
[root@localhost ~]# docker run --name tomcat-server -d tomcat:appv1
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb38a4a6b38a tomcat:appv1 "/usr/local/tomcat/b…" 9 seconds ago Up 9 seconds 8080/tcp tomcat-server
[root@localhost nginx]# docker inspect -f {{.NetworkSettings.IPAddress}} tomcat-server
172.17.0.2#运行nginx容器,并配置动态页面代理至tomcat业务容器
[root@localhost ~]# mkdir /nginx/
[root@localhost nginx]# tree /nginx/
/nginx/
├── conf
│ └── server.conf
└── html
└── index.html[root@localhost nginx]# cat /nginx/conf/server.conf
server {
listen 80;
server_name localhost;
location / {
root /html;
index index.html index.htm;
}
location ~ \.jsp$ {
proxy_pass http://tomcat-server:8080;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}[root@localhost nginx]# cat /nginx/html/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<h1>this is a static page</h1>
<td><a href="/index.jsp">动态网站</a></td>
</body>
</html>

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)