实战案例-自定义镜像运行Nginx及tomcat服务并基于NFS实现动静分离

一、创建基础镜像
1、centos

#Dockerfile
cat Dockerfile 
#自定义Centos 基础镜像
FROM centos:7.9.2009 
MAINTAINER  3529715924@qq.com
ADD filebeat-7.12.1-x86_64.rpm /tmp
RUN yum update -y
RUN yum install -y /tmp/filebeat-7.12.1-x86_64.rpm vim wget tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop &&  rm -rf /etc/localtime /tmp/filebeat-7.12.1-x86_64.rpm && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
#build-command
cat build-command.sh 
#!/bin/bash
docker build -t  docker-harbor.com/baseimages/magedu-centos-base:7.9.2009 .

docker push docker-harbor.com/baseimages/magedu-centos-base:7.9.2009

2、jdk

#Dockerfile
cat Dockerfile 
#JDK Base Image
FROM docker-harbor.com/baseimages/magedu-centos-base:7.9.2009 

MAINTAINER 3529715924@qq.com


ADD jdk-8u212-linux-x64.tar.gz /usr/local/src/
RUN ln -sv /usr/local/src/jdk1.8.0_212 /usr/local/jdk 
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
cat build-command.sh 
#!/bin/bash
docker build -t docker-harbor.com/pub-images/jdk-base:v8.212  .
sleep 1
docker push  docker-harbor.com/pub-images/jdk-base:v8.212


3、tomcat

#Dockerfile
cat Dockerfile 
#Tomcat 8.5.43基础镜像
FROM docker-harbor.com/pub-images/jdk-base:v8.212 

MAINTAINER 3529715924@qq.com

RUN mkdir /apps /data/tomcat/webapps /data/tomcat/logs -pv 
ADD apache-tomcat-8.5.43.tar.gz  /apps
RUN useradd tomcat -u 2050 && ln -sv /apps/apache-tomcat-8.5.43 /apps/tomcat && chown -R tomcat.tomcat /apps /data

#build-command.sh
cat build-command.sh 
#!/bin/bash
docker build -t docker-harbor.com/pub-images/tomcat-base:v8.5.43  .
sleep 3
docker push  docker-harbor.com/pub-images/tomcat-base:v8.5.43

4、nginx

#Dockerfile
cat Dockerfile 
#Nginx Base Image
FROM docker-harbor.com/baseimages/magedu-centos-base:7.9.2009 

MAINTAINER  3529715924@qq.com

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.20.2.tar.gz /usr/local/src/
RUN cd /usr/local/src/nginx-1.20.2 && ./configure  && make && make install && ln -sv  /usr/local/nginx/sbin/nginx /usr/sbin/nginx  &&rm -rf /usr/local/src/nginx-1.20.2.tar.gz 

# build-command
cat build-command.sh 
#!/bin/bash
docker build -t docker-harbor.com/pub-images/nginx-base:v1.20.2  .
sleep 1
docker push  docker-harbor.com/pub-images/nginx-base:v1.20.2

二、构建项目镜像
1、构建tomcat工程

#Dockerfile
cat Dockerfile 
#tomcat web1
FROM docker-harbor.com/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/
#ADD filebeat-7.5.1-x86_64.rpm /tmp/
#RUN cd /tmp && yum localinstall -y filebeat-7.5.1-amd64.deb

EXPOSE 8080 8443

CMD ["/apps/tomcat/bin/run_tomcat.sh"]

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


1、构建nginx

#Dockerfile
cat Dockerfile 
#Nginx 1.20.2
FROM docker-harbor.com/pub-images/nginx-base:v1.20.2 


RUN useradd tomcat -u 2050 
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 && chown tomcat.tomcat -R /usr/local/nginx/html/webapp/static /usr/local/nginx/html/webapp/images 

EXPOSE 80 443

CMD ["nginx"] 

#build-command
cat build-command.sh 
#!/bin/bash
TAG=$1
docker build -t docker-harbor.com/magedu/nginx-web1:${TAG} .
echo "镜像构建完成,即将上传到harbor"
sleep 1
docker push docker-harbor.com/magedu/nginx-web1:${TAG}
echo "镜像上传到harbor完成"


三、部署
1、部署tomcat

kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
  labels:
    app: magedu-tomcat-app1-deployment-label
  name: magedu-tomcat-app1-deployment
  namespace: magedu
spec:
  replicas: 2
  selector:
    matchLabels:
      app: magedu-tomcat-app1-selector
  template:
    metadata:
      labels:
        app: magedu-tomcat-app1-selector
    spec:
      containers:
      - name: magedu-tomcat-app1-container
        image: docker-harbor.com/magedu/tomcat-app1:1.0
        #command: ["/apps/tomcat/bin/run_tomcat.sh"]
        imagePullPolicy: IfNotPresent
        #imagePullPolicy: Always
        ports:
        - containerPort: 8080
          protocol: TCP
          name: http
        env:
        - name: "password"
          value: "123456"
        - name: "age"
          value: "18"
        resources:
          limits:
            cpu: 1
            memory: "512Mi"
          requests:
            cpu: 500m
            memory: "512Mi"
        volumeMounts:
        - name: magedu-images
          mountPath: /usr/local/nginx/html/webapp/images
          readOnly: false
        - name: magedu-static
          mountPath: /usr/local/nginx/html/webapp/static
          readOnly: false
      volumes:
      - name: magedu-images
        nfs:
          server: 192.168.74.150
          path: /data/kubedata1/magedu/images
      - name: magedu-static
        nfs:
          server: 192.168.74.150
          path: /data/kubedata1/magedu/static
#      nodeSelector:
#        project: magedu
#        app: tomcat
---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: magedu-tomcat-app1-service-label
  name: magedu-tomcat-app1-service
  namespace: magedu
spec:
  #type: NodePort
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 8080
    #nodePort: 30092
  selector:
    app: magedu-tomcat-app1-selector

2、部署nginx

kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    app: magedu-nginx-deployment-label
  name: magedu-nginx-deployment
  namespace: magedu
spec:
  replicas: 1
  selector:
    matchLabels:
      app: magedu-nginx-selector
  template:
    metadata:
      labels:
        app: magedu-nginx-selector
    spec:
      containers:
      - name: magedu-nginx-container
        image: docker-harbor.com/magedu/nginx-web1:1.1 
        #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: "20"
        resources:
          limits:
            cpu: 500m
            memory: 500Mi
          requests:
            cpu: 500m
            memory: 500Mi

        volumeMounts:
        - name: magedu-images
          mountPath: /usr/local/nginx/html/webapp/images
          readOnly: false
        - name: magedu-static
          mountPath: /usr/local/nginx/html/webapp/static
          readOnly: false
      volumes:
      - name: magedu-images
        nfs:
          server: 192.168.74.150
          path: /data/kubedata1/magedu/images 
      - name: magedu-static
        nfs:
          server: 192.168.74.150
          path: /data/kubedata1/magedu/static
      #nodeSelector:
      #  group: magedu

    

---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: magedu-nginx-service-label
  name: magedu-nginx-service
  namespace: magedu
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30090
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
    nodePort: 30091
  selector:
    app: magedu-nginx-selector

3、配置负载均衡

#haproxy.cfg
...
listen k8s_webapp_443
    bind 192.168.74.242:443
    mode tcp
    server 192.168.74.147 192.168.74.147:30091 check inter 2000 fall 3 rise 5
    server 192.168.74.148 192.168.74.148:30091 check inter 2000 fall 3 rise 5
    server 192.168.74.149 192.168.74.149:30091 check inter 2000 fall 3 rise 5
listen k8s_webapp_80
    bind 192.168.74.242:80
    mode tcp
    server 192.168.74.147 192.168.74.147:30090 check inter 2000 fall 3 rise 5
    server 192.168.74.148 192.168.74.148:30090 check inter 2000 fall 3 rise 5
    server 192.168.74.149 192.168.74.149:30090 check inter 2000 fall 3 rise 5

测试
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值