自定义镜像运行Nginx及Java服务并基于NAS实现动静分离
nginx+tomcat动静分离
业务流程图:
构建jdk与tomcat业务镜像与资源
1、构建jdk镜像
创建profile环境变量文件
root@master1:/dockerfile/web/jdk# cat profile export JAVA_HOME=/usr/local/jdk1.8.0_191 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
编写Dockerfile
root@master1:/dockerfile/web/jdk# cat Dockerfile FROM harbor.cncf.net/os/ubuntu:20.04 MAINTAINER LXH LABEL description="jdk-1.8.191" ADD jdk-8u191-linux-x64.tar.gz /usr/local/ ADD profile /etc/profile ENV JAVA_HOME=/usr/local/jdk1.8.0_191 ENV PATH=$JAVA_HOME/bin:$PATH ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
构建镜像
root@master1:/dockerfile/web/jdk# nerdctl build -t harbor.cncf.net/baseimages/jdk:1.8.191 .
推送镜像到harbor
root@master1:/dockerfile/web/jdk# nerdctl push harbor.cncf.net/baseimages/jdk:1.8.191
2、构建tomcat镜像
root@master1:/dockerfile/web/tomcat# cat Dockerfile FROM harbor.cncf.net/baseimages/jdk:1.8.191 MAINTAINER LXH LABEL description="tomcat8.5.43" ADD apache-tomcat-8.5.43.tar.gz /usr/local RUN ln -sv /usr/local/apache-tomcat-8.5.43 /usr/local/tomcat
执行构建镜像
root@master1:/dockerfile/web/tomcat# cat build.sh #!/bin/bash DIR=$(pwd) nerdctl build -t harbor.cncf.net/web/tomcat:8.5.13 $DIR nerdctl push harbor.cncf.net/web/tomcat:8.5.13
3、构建tomcat业务镜像
创建业务镜像相关配置文件和启动文件
打包代码文件
root@master1:/dockerfile/project/tomcat# tar tf app1.tar.gz ./ ./index.html
镜像构建文件
root@master1:/dockerfile/project/tomcat# cat build-command.sh #!/bin/bash TAG=$1 nerdctl build -t harbor.cncf.net/project/tomcat-app1:${TAG} . nerdctl push harbor.cncf.net/project/tomcat-app1:${TAG}
tomcat容器前台启动文件
root@master1:/dockerfile/project/tomcat# cat run_tomcat.sh #!/bin/bash su - tomcat -c "/usr/local/tomcat/bin/catalina.sh start" tail -f /usr/local/tomcat/logs/catalina.out
创建Dockerfile
root@master1:/dockerfile/tomcat# cat Dockerfile FROM harbor.cncf.net/web/tomcat:8.5.13 MAINTAINER LXH ADD catalina.sh /usr/local/tomcat/bin/catalina.sh ADD server.xml /usr/local/tomcat/conf/server.xml ADD app1.tar.gz /data/tomcat/webapps/myapp/ ADD run_tomcat.sh /usr/local/tomcat/bin/run_tomcat.sh RUN useradd tomcat RUN chown -R tomcat.tomcat /data/ /usr/local/tomcat/ EXPOSE 8080 8443 CMD ["/usr/local/tomcat/bin/run_tomcat.sh"]
构建业务tomcat镜像
root@master1:/dockerfile/tomcat# ./build-command.sh 1.1.1
验证镜像仓库
运行tomcat业务镜像测试:
root@master1:/dockerfile/project/tomcat# nerdctl run -d -p 8080:8080 --name tomcat-app1 harbor.cncf.net/project/tomcat-app1:1.1.1 9a71d516ff74dfcd9fa4d34dbe4ea9644f8db43c3900102112c613db1f9053e4 root@master1:/dockerfile/project/tomcat# nerdctl logs -f tomcat-app1
准备站点资源文件
配置nfs文件共享
创建k8s业务资源文件
root@master1:/dockerfile/project/tomcat# cat tomcat-app1.yaml kind: Deployment apiVersion: apps/v1 metadata: labels: app: tomcat-app1-deployment-label name: tomcat-app1-deployment namespace: test spec: replicas: 1 selector: matchLabels: app: tomcat-app1 template: metadata: labels: app: tomcat-app1 spec: containers: - name: tomcat image: harbor.cncf.net/project/tomcat-app1:1.1.2 imagePullPolicy: IfNotPresent ports: - containerPort: 8080 protocol: TCP name: http volumeMounts: - name: tomcatapp1-images mountPath: /data/tomcat/webapps/myapp/images readOnly: false - name: tomcatapp1-static mountPath: /data/tomcat/webapps/myapp/static readOnly: false volumes: - name: tomcatapp1-images nfs: server: 192.168.100.15 path: /data/k8sdata/tomcatapp1/images - name: tomcatapp1-static nfs: server: 192.168.100.15 path: /data/k8sdata/tomcatapp1/static --- kind: Service apiVersion: v1 metadata: labels: app: tomcat-app1-svc-label name: tomcat-app1-svc namespace: test spec: ports: - name: http port: 80 protocol: TCP targetPort: 8080 selector: app: tomcat-app1
验证创建
root@master1:/dockerfile/project/tomcat# kubectl apply -f tomcat-app1.yaml deployment.apps/tomcat-app1-deployment configured service/tomcat-app1-svc configured root@master1:/dockerfile/project/tomcat# kubectl get pods NAME READY STATUS RESTARTS AGE tomcat-app1-deployment-9bfb4846c-7wb9q 1/1 Running 0 118s root@master1:/dockerfile/project/tomcat# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE tomcat-app1-svc ClusterIP 10.100.151.84 <none> 80/TCP 2m5s
构建nginx业务镜像与资源
1、构建nginx镜像
创建构建脚本
root@master1:/dockerfile/web/nginx# cat build.sh #!/bin/bash DIR=$(pwd) nerdctl build -t harbor.cncf.net/web/nginx:1.20.2 $DIR nerdctl push harbor.cncf.net/web/nginx:1.20.2
创建Dockerfile
root@master1:/dockerfile/web/nginx# cat Dockerfile FROM harbor.cncf.net/os/ubuntu:20.04 MAINTAINER lxh #nginx build ADD nginx-1.20.2.tar.gz /usr/local/src/ RUN useradd nginx -s /sbin/nologin -M RUN cd /usr/local/src/nginx-1.20.2 && \ ./configure \ --user=nginx \ --group=nginx \ --prefix=/usr/local/nginx \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-stream && \ make && make install RUN rm -fr /usr/local/src/nginx-1.20.2
执行构建
root@master1:/dockerfile/web/nginx# ./build.sh
2、构建nginx业务镜像
创建构建脚本
root@master1:/dockerfile/project/nginx# cat build-command.sh #!/bin/bash TAG=$1 nerdctl build -t harbor.cncf.net/project/nginx-web1:${TAG} . nerdctl push harbor.cncf.net/project/nginx-web1:${TAG}
创建Dockerfile业务镜像
root@master1:/dockerfile/project/nginx# cat Dockerfile FROM harbor.cncf.net/web/nginx:1.20.2 ADD nginx.conf /usr/local/nginx/conf/nginx.conf ADD app1.tar.gz /usr/local/nginx/html/webapp/ ADD index.html /usr/local/nginx/html/index.html #静态资源挂载路径 RUN mkdir -p /usr/local/nginx/html/webapp/static /usr/local/nginx/html/webapp/images EXPOSE 80 443 CMD ["/usr/local/nginx/sbin/nginx"]
创建nginx配置文件
root@master1:/dockerfile/project/nginx# cat nginx.conf user nginx nginx; worker_processes auto; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; daemon off; #取消后台启动 events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; upstream tomcat_webserver { server tomcat-app1-svc.test.svc.cluster.local:80; #tomcat的svc名称.+namespace名称.+svc.+k8s集群名称 } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } location /webapp { root html; index index.html index.htm; } #反向代理tomcat后端服务 location /myapp { proxy_pass http://tomcat_webserver/myapp; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
执行构建
root@master1:/dockerfile/project/nginx# ./build-command.sh 1.0
3、创建nginx k8s资源文件
创建nfs共享站点资源文件
创建nginx yaml
root@master1:/dockerfile/project/nginx# cat nginx.yaml kind: Deployment apiVersion: apps/v1 metadata: labels: app: nginx-deployment-label name: nginx-deployment namespace: test spec: replicas: 1 selector: matchLabels: app: nginx-app template: metadata: labels: app: nginx-app spec: containers: - name: nginx image: harbor.cncf.net/project/nginx-web1:1.0 imagePullPolicy: IfNotPresent ports: - containerPort: 80 protocol: TCP name: http - containerPort: 443 protocol: TCP name: https resources: limits: cpu: 500m memory: 512Mi requests: cpu: 500m memory: 256Mi volumeMounts: - name: images mountPath: /usr/local/nginx/html/webapp/images readOnly: false - name: static mountPath: /usr/local/nginx/html/webapp/static readOnly: false volumes: - name: images nfs: server: 192.168.100.15 path: /data/k8sdata/nginx/images - name: static nfs: server: 192.168.100.15 path: /data/k8sdata/nginx/static --- kind: Service apiVersion: v1 metadata: labels: app: nginx-svc-label name: nginx-svc namespace: test spec: type: NodePort ports: - name: http port: 80 protocol: TCP targetPort: 80 nodePort: 30180 - name: https port: 443 protocol: TCP targetPort: 443 nodePort: 31443 selector: app: nginx-app
查看创建资源
root@master1:/dockerfile/project/nginx# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-5b46c8db6c-8qnwd 1/1 Running 0 2m45s tomcat-app1-deployment-9bfb4846c-7wb9q 1/1 Running 0 98m root@master1:/dockerfile/project/nginx# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-svc NodePort 10.100.220.87 <none> 80:30180/TCP,443:31443/TCP 8m35s tomcat-app1-svc ClusterIP 10.100.151.84 <none> 80/TCP 98m
访问tomcat后端反向代理页面
tomcat后端资源文件
访问nginx前端页面
nginx前端资源文件
本文来自博客园,作者:PunchLinux,转载请注明原文链接:https://www.cnblogs.com/punchlinux/p/16575380.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)