1、创建jdk和tomcat镜像,使用 nginx + tomcat + NFS 实现web请求的动静分离

基于基础的linux系统(centos/ubuntu/alpine)镜像,制作Nginx基础镜像
Centos基础镜像制作
tree /opt/k8s-data/dockerfile/system/centos
├── build-command.sh
├── Dockerfile
└── filebeat-6.8.1-x86_64.rpm

Dockerfile文件内容

FROM harbor.magedu.net/baseimages/centos:7.6.1810 
ADD filebeat-6.8.1-x86_64.rpm /tmp/ 
RUN yum install -y epel-release /tmp/filebeat-6.5.4-x86_64.rpm && rm -rf /tmp/filebeat-6.5.4-x86_64.rpm 
RUN yum install -y vim wget tree pcre pcre-devel gcc gcc-c++ zlib zlib-devel openssl openssl-devel net-tools iotop unzip zip iproute ntpdate nfs-utils tcp dump telnet traceroute 
RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

build-command脚本

#!/bin/bash docker build -t harbor.magedu.net/baseimages/centos-base:v7.6 . 
sleep 1 
docker push harbor.magedu.net/baseimages/centos-base:v7.6

执行构建centos 基础镜像
bash build-command.sh

Nginx 基础镜像制作
tree /opt/k8s-data/dockerfile/pub-images/nginx-base
├── build-command.sh
├── Dockerfile
└── nginx-1.14.2.tar.gz

Dockerfile文件内容

#Nginx Base Image 
FROM harbor.magedu.net/baseimages/centos-base:v7.6 
RUN yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop 
ADD nginx-1.14.2.tar.gz /usr/local/src/ 
RUN cd /usr/local/src/nginx-1.14.2 && ./configure && make && make install && ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx && useradd nginx -u 2001

build-command脚本

#!/bin/bash docker build -t harbor.magedu.net/pub-images/nginx-base:v1.14.2 . 
sleep 1 
docker push harbor.magedu.net/pub-images/nginx-base:v1.14.2

执行构建Nginx基础镜像
bash build-command.sh

基于基础的linux系统(centos/ubuntu/alpine)镜像,制作JDK基础镜像、Tomcat镜像
JDK基础镜像制作
tree /opt/k8s-data/dockerfile/pub-images/jdk-1.8.212
├── build-command.sh
├── Dockerfile
├── jdk-8u212-linux-x64.tar.gz
└── profile

Dockerfile文件内容

#JDK Base Image 
FROM harbor.magedu.net/baseimages/centos-base:v7.6 
ADD jdk-8u212-linux-x64.tar.gz /usr/local/src/ 
RUN ln -sv /usr/local/src/jdk1.8.0_212 /usr/local/jdk && groupadd tomcat -g 2018 && useradd tomcat -u 2018 -g 2018 
ADD profile /etc/profile 
ENV JAVA_HOME /usr/local/jdk 
ENV JRE_HOME $JAVA_HOME/jre 
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/ 
ENV PATH $PATH:$JAVA_HOME/bin

build-command脚本

#!/bin/bash docker build -t harbor.magedu.net/pub-images/jdk-base:v8.212 . 
sleep 1 
docker push harbor.magedu.net/pub-images/jdk-base:v8.212

执行构建JDK基础镜像
bash build-command

tomcat基础镜像制作
tree /opt/k8s-data/dockerfile/pub-images/tomcat-base
├── apache-tomcat-8.5.43.tar.gz
├── build-command.sh
└── Dockerfile

Dockerfile文件内容

#JDK Base Image 
FROM harbor.magedu.net/pub-images/jdk-base:v8.212 
RUN mkdir /apps /data/tomcat/webapps /data/tomcat/logs -pv 
ADD apache-tomcat-8.5.43.tar.gz /apps 
RUN ln -sv /apps/apache-tomcat-8.5.43 /apps/tomcat && chown -R tomcat.tomcat /apps /data -R 
#ADD filebeat-6.4.2-x86_64.rpm /tmp/ 
#RUN yum install -y /tmp/filebeat-6.4.2-x86_64.rpm && rm -rf /tmp/filebeat-6.4.2- x86_64.rpm

build-command脚本

#!/bin/bash docker build -t harbor.magedu.net/pub-images/tomcat-base:v8.5.43 . 
sleep 1 
docker push harbor.magedu.net/pub-images/tomcat-base:v8.5.43

构建tomcat基础镜像
bash build-command

tomcat业务镜像app1制作
tree /opt/k8s-data/dockerfile/linux36/tomcat-app1
├── app1.tar.gz
├── build-command.sh
├── catalina.sh
├── Dockerfile
├── filebeat.yml
├── myapp
│ └── index.html
├── run_tomcat.sh
└── server.xml

Dockerfile文件内容

#tomcat web1 
FROM harbor.magedu.net/pub-images/tomcat-base:v8.5.43 
ADD catalina.sh /apps/tomcat/bin/catalina.sh 
ADD server.xml /apps/tomcat/conf/server.xml 
#ADD myapp/* /data/tomcat/webapps/myapp/ 
ADD app1.tar.gz /data/tomcat/webapps/myapp/ 
ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh 
#ADD filebeat.yml /etc/filebeat/filebeat.yml 
RUN chown -R tomcat.tomcat /data/ /apps/ 
EXPOSE 8080 8443 
CMD ["/apps/tomcat/bin/run_tomcat.sh"]

build-command脚本

#!/bin/bash TAG=$1 
docker build -t harbor.magedu.net/linux36/tomcat-app1:${TAG} . 
sleep 3 
docker push harbor.magedu.net/linux36/tomcat-app1:${TAG}

执行构建tomcat业务镜像
bash build-command.sh

k8s中nginx+tomcat实现动静分离
实现一个通用的nginx+tomcat动静分离web架构,即用户访问的静态页面和图片在由nginx直接响应,而动态请求则基于location转发至tomcat。
重点:Nginx基于tomcat的service name转发用户请求到tomcat业务app

Nginx业务镜像制作
tree /opt/k8s-data/dockerfile/linux36/nginx
├── build-command.sh
├── Dockerfile
├── index.html
├── nginx.conf
└── webapp
└── index.html

Dockerfile文件内容

#Nginx Base Image 
FROM harbor.magedu.net/pub-images/nginx-base:v1.14.2 
ADD nginx.conf /usr/local/nginx/conf/nginx.conf 
ADD webapp/* /usr/local/nginx/html/webapp/ 
ADD index.html /usr/local/nginx/html/index.html 
#RUN mkdir /usr/local/nginx/html/webapp/about /usr/local/nginx/html/webapp/images EXPOSE 80 443 
CMD ["nginx"]

build-command脚本

#!/bin/bash docker build -t harbor.magedu.net/linux36/nginx-web1:v1 . 
sleep 1 
docker push harbor.magedu.net/linux36/nginx-web1:v1

nginx配置文件

upstream tomcat_webserver { 
    server linux36-tomcat-app1-service.linux36.svc.linux36.local:80; 
}
server {
    location /myapp{
        proxy_pass http://tomcat_webserver; 
        proxy_set_header Host $host; 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_set_header X-Real-IP $remote_addr; 
    } 
}

执行构建Nginx 业务镜像
bash build-command

基于NFS实现动静分离
图片的上传由后端服务器tomcat完成,图片的读取由前端的nginx响应,就需要nginx与tomcat的数据保持一致性,因此需要将数据保存到k8s环境外部的存储服务器,然后再挂载到各nginx与tomcat 的容器中进行相应的操作。

http://docs.kubernetes.org.cn/429.html #存储卷类型及使用

NFS 服务器环境准备

# mkdir /data/linux36/images #图片目录 
# mkdir /data/linux36/static #静态文件目录 
# vim /etc/exports 
/data/linux36 *(rw,no_root_squash) 
# systemctl restart nfs-server

NFS客户端挂载并测试写入文件

mount -t nfs 192.168.7.108:/data/linux36 /mnt
cp /etc/passwd /mnt/ #必须能够写入数据

nginx 业务容器yaml

kind:Deployment
apiVersion:extensions/v1beta1
metadata:
    labels:
        app:linux36-nginx-deployment-label
        name:linux36-nginx-deployment
        namespace:linux36
spec:
    replicas:1
    selector:
    matchLabels:
        app:linux36-nginx-selector
    template:
        metadata:
            labels:
                app:linux36-nginx-selector
    spec:
    containers:
        - name:linux36-nginx-container
            image:harbor.magedu.net/linux36/nginx-web1:v1
            #command:["/apps/tomcat/bin/run_tomcat.sh"]
            #imagePullPolicy:IfNotPresent
            imagePullPolicy:Always
    ports:
        - containerPort:80
            protocol:TCP
            name:http
        - containerPort:443
            protocol:TCP
            name:https
    env:
        - name:"password"
        value:"123456"
        - name:"age"
        value:"18"
    resources:
        limits:
            cpu:2
            memory:2Gi
        requests:
            cpu:500m
            memory:1Gi
            volumeMounts:
            - name: linux36-images
                mountPath: /usr/local/nginx/html/webapp/images
                readOnly: false
            - name: linux36-static
                mountPath: /usr/local/nginx/html/webapp/static
                readOnly: false
                volumes: #kubectl explain Deployment.spec.template.spec.volumes
            - name: linux36-images
                nfs:
                    server: 192.168.7.108
                    path: /data/linux36/images
            - name: linux36-static
                nfs:
                    server: 192.168.7.108
                    path: /data/linux36/static
---
kind:Service
apiVersion:v1
metadata:
    labels:
        app:linux36-nginx-service-label
        name:linux36-nginx-service
        namespace:linux36
spec:
    type:
    NodePort
    ports:
        - name:http
            port:80
            protocol:TCP
            targetPort:80
            nodePort:30002
        - name:https
            port:443
            protocol:TCP
            targetPort:443
            nodePort:30443
    selector:
        app:linux36-nginx-selector

创建Nginx pod
kubectl apply -f nginx.yaml

pod中验证NFS挂载
kubectl get pods -n linux36

tomcat业务pod更新挂载

/opt/k8s-data/yaml/linux36/tomcat-app1/tomcat-app1.yaml
kind: Deployment 
apiVersion: extensions/v1beta1 
metadata: 
    labels: 
        app: linux36-tomcat-app1-deployment-label 
    name: linux36-tomcat-app1-deployment 
    namespace: linux36 
spec: 
    replicas: 1 
    selector: 
        matchLabels: 
            app: linux36-tomcat-app1-selector 
    template: 
        metadata: 
        labels: 
            app: linux36-tomcat-app1-selector 
    spec: 
        containers:
        - name: linux36-tomcat-app1-container 
            image: harbor.magedu.net/linux36/tomcat-app1:2019-08-02_11_02_30 
            #command: ["/apps/tomcat/bin/run_tomcat.sh"] 
            #imagePullPolicy: IfNotPresent 
            imagePullPolicy: Always 
            ports: 
            - containerPort: 8080 
                protocol: TCP 
                name: http 
        volumeMounts: 
            - name: linux36-images 
                mountPath: /data/tomcat/webapps/myapp/images 
                readOnly: false 
            - name: linux36-static 
                mountPath: /data/tomcat/webapps/myapp/static 
                readOnly: false 
                volumes: 
            - name: linux36-images 
                nfs:server: 192.168.7.108 
                path: /data/linux36/images 
            - name: linux36-static 
                nfs:
                    server: 192.168.7.108 
                    path: /data/linux36/static 
--- 
kind: Service 
apiVersion: v1 
metadata: 
    labels: 
        app: linux36-tomcat-app1-service-label 
    name: linux36-tomcat-app1-service 
    namespace: linux36 
spec: 
    type: NodePort 
        ports: 
            - name: http 
                port: 80 
                protocol: TCP
                targetPort: 8080 
                nodePort: 30003 
                selector: 
                app: linux36-tomcat-app1-selector

执行更新tomcat app1业务容器yaml
kubectl apply -f tomcat- app1.yaml

访问web测试
上传数据到NFS
tree /data/linux36

├── images
│ └── 1.jpg
└── static
└── index.html
访问nginx 业务pod
http://ip/myaopp/1.jpg

访问tomcat业务pod
http://ip:port/webapp/images/1.jpg

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352