一、创建基础镜像
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
测试