案例-在Kubernetes运行Jenkins、以及在单Pod中以多容器模式运行基于LNMP的WordPress案例
部署架构
镜像分层
step1 构建基础镜像
装常用的包、改时区 DOCKERFILE
#自定义Centos 基础镜像
FROM centos:7.9.2009
MAINTAINER xxx xxx@qq.com
ADD filebeat-7.12.1-x86_64.rpm /tmp
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 && useradd nginx -u 2088
#!/bin/bash
docker build -t harbor.linuxarchitect.io/baseimages/magedu-centos-base:7.9.2009 ./
docker push harbor.linuxarchitect.io/baseimages/magedu-centos-base:7.9.2009
输出 magedu-centos-base:7.9.2009
step2 构建JDK镜像(基于centos镜像) 可以根据版本打多个
cd learning-k8s/01-jiege/k8s-data/dockerfile/web/pub-images/jdk-1.8.212/
#JDK Base Image
#FROM harbor.magedu.net/baseimages/magedu-centos-base:7.9.2009
FROM harbor.linuxarchitect.io/baseimages/magedu-centos-base:7.9.2009
MAINTAINER xxx "xxx@magedu.net"
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
docker build -t harbor.linuxarchitect.io/pub-images/jdk-base:v8.212 .
#sleep 1
docker push harbor.linuxarchitect.io/pub-images/jdk-base:v8.212
输出 jdk-base
step3 构建服务基础镜像 例如tomcat nginx mysql等
learning-k8s/01-jiege/k8s-data/dockerfile/web/pub-images/tomcat-base-8.5.43/Dockerfile
#Tomcat 8.5.43基础镜像
FROM harbor.linuxarchitect.io/pub-images/jdk-base:v8.212
MAINTAINER xxx "xxx@magedu.net"
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 -R
#!/bin/bash
docker build -t harbor.linuxarchitect.io/pub-images/tomcat-base:v8.5.43 .
#sleep 3
docker push harbor.linuxarchitect.io/pub-images/tomcat-base:v8.5.43
输出 tomcat-base镜像
step4 构建业务镜像
#Jenkins Version 2.190.1
#FROM harbor.magedu.net/pub-images/jdk-base:v8.212
FROM harbor.linuxarchitect.io/pub-images/jdk-base:v8.212
MAINTAINER xxx xxx@magedu.net
ADD jenkins-2.319.2.war /apps/jenkins/jenkins.war
ADD run_jenkins.sh /usr/bin/
EXPOSE 8080
CMD ["/usr/bin/run_jenkins.sh"]
echo "即将开始就像构建,请稍等!" && echo 3 && sleep 1 && echo 2 && sleep 1 && echo 1
#nerdctl build -t harbor.linuxarchitect.io/jenkins:v2.319.2 .
docker build -t harbor.linuxarchitect.io/magedu/jenkins:v2.319.2 .
if [ $? -eq 0 ];then
echo "即将开始镜像上传,请稍等!" && echo 3 && sleep 1 && echo 2 && sleep 1 && echo 1
docker push harbor.linuxarchitect.io/magedu/jenkins:v2.319.2
if [ $? -eq 0 ];then
echo "镜像上传成功!"
else
echo "镜像上传失败"
fi
else
echo "镜像构建失败,请检查构建输出信息!"
fi
输出jenkins镜像
step5 创建sotrageclass 动态存储
step6 运行jenkins
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-datadir-pvc
namespace: magedu
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storageClassName: nfs-csi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-root-data-pvc
namespace: magedu
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storageClassName: nfs-csi
---
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
labels:
app: magedu-jenkins
name: magedu-jenkins-deployment
namespace: magedu
spec:
replicas: 1
selector:
matchLabels:
app: magedu-jenkins
template:
metadata:
labels:
app: magedu-jenkins
spec:
containers:
- name: magedu-jenkins-container
#image: harbor.magedu.net/magedu/jenkins:v2.319.2
image: harbor.linuxarchitect.io/magedu/jenkins:v2.319.2
#imagePullPolicy: IfNotPresent
imagePullPolicy: Always
ports:
- containerPort: 8080
protocol: TCP
name: http
volumeMounts:
- mountPath: "/apps/jenkins/jenkins-data/"
name: jenkins-datadir-magedu
- mountPath: "/root/.jenkins"
name: jenkins-root-datadir
volumes:
- name: jenkins-datadir-magedu
persistentVolumeClaim:
claimName: jenkins-datadir-pvc
- name: jenkins-root-datadir
persistentVolumeClaim:
claimName: jenkins-root-data-pvc
---
kind: Service
apiVersion: v1
metadata:
labels:
app: magedu-jenkins
name: magedu-jenkins-service
namespace: magedu
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8080
nodePort: 38080
selector:
app: magedu-jenkins