自定义镜像运行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前端资源文件

 

 

posted @   PunchLinux  阅读(181)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
  1. 1 Get Lucky Daft Punnk
  2. 2 烦恼歌 张学友
  3. 3 Way Back Home Conor Maynard
  4. 4 Put A Little Love In Your Heart Jackie DeShannon
  5. 5 菊次郎的夏天 久石譲
  6. 6 一丝不挂 陈奕迅
  7. 7 日落大道 梁博
  8. 8 Rage your dream m.o.v.e
  9. 9 Don't Be So Shy Imany
  10. 10 芒种 腾格尔
芒种 - 腾格尔
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

Not available

点击右上角即可分享
微信分享提示