一、将前端项目打包成docker镜像,并推送到远程仓库
1、在本地文件夹创建三个Dockerfile、nginx.conf和front文件夹
[root@node4 testHtml]# ll total 8 -rw-r--r-- 1 root root 213 Jan 17 17:29 Dockerfile drwxr-xr-x 2 root root 24 Jan 17 17:07 front -rw-r--r-- 1 root root 803 Jan 17 17:39 nginx.conf
front文件夹中就是前端的代码:
2、nginx.conf内容:
worker_processes 1;
events {
worker_connections 1024;
}
http {
sendfile on;
tcp_nodelay on;
keepalive_timeout 30;
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name localhost;
root /usr/share/nginx/front/dist;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
location / {
try_files $uri $uri/ =404;
index index.html index.htm;
gzip_static on;
expires max;
add_header Cache-Control public;
if ($request_filename ~* ^.*?\.(eot)|(ttf)|(woff)|(svg)|(otf)$) {
add_header Access-Control-Allow-Origin *;
}
}
}
}
3、Dockerfile文件内容:
FROM nginx RUN mkdir /usr/share/nginx/front RUN mkdir /usr/share/nginx/front/dist RUN rm -rf /etc/nginx/nginx.conf COPY ./nginx.conf /etc/nginx/nginx.conf COPY ./front /usr/share/nginx/front/dist EXPOSE 80
4、前端页面中就是简单的一个html:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <h1>这是测试页面</h1> </body> </html>
二、打包镜像并推送到远程仓库
1、打包镜像:
docker build -f Dockerfile -t jgqfront:latest .
2、为镜像打标签,并推送到远程仓库
# 打标签 docker tag 1a4ab0dec0ac registry.cn-hangzhou.aliyuncs.com/jgqk8s/jgqfront:latest # 登录: docker login --username=18652907029 registry.cn-hangzhou.aliyuncs.com # 推送: docker push registry.cn-hangzhou.aliyuncs.com/jgqk8s/jgqfront:latest
三、在K8s上部署并暴露服务
1、部署一个k8s Deployment(部署2个pod):
kind: Deployment
apiVersion: apps/v1
metadata:
name: jgqfront
namespace: common
labels:
app: jgqfront
annotations:
deployment.kubernetes.io/revision: '1'
kubesphere.io/alias-name: jgqfront
kubesphere.io/creator: admin
kubesphere.io/description: jgqfront
spec:
replicas: 2
selector:
matchLabels:
app: jgqfront
template:
metadata:
creationTimestamp: null
labels:
app: jgqfront
spec:
volumes:
- name: host-time
hostPath:
path: /etc/localtime
type: ''
containers:
- name: container-oojz64
image: 'registry.cn-hangzhou.aliyuncs.com/jgqk8s/jgqfront:latest'
ports:
- name: tcp-80
containerPort: 80
protocol: TCP
resources:
limits:
cpu: '1'
memory: 1000Mi
volumeMounts:
- name: host-time
readOnly: true
mountPath: /etc/localtime
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: IfNotPresent
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
serviceAccountName: default
serviceAccount: default
securityContext: {}
affinity: {}
schedulerName: default-scheduler
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
revisionHistoryLimit: 10
progressDeadlineSeconds: 600
2、再暴露一个Service服务:
kind: Service apiVersion: v1 metadata: name: jgqfront namespace: common labels: app: jgqfront annotations: kubesphere.io/alias-name: jgqfront kubesphere.io/creator: admin kubesphere.io/description: jgqfront spec: ports: - name: http-jgqfront protocol: TCP port: 80 targetPort: 80 nodePort: 31151 selector: app: jgqfront clusterIP: 10.233.2.13 clusterIPs: - 10.233.2.13 type: NodePort sessionAffinity: None externalTrafficPolicy: Cluster
3、查看服务端口:
[root@node4 testHtml]# kubectl get svc -n common |grep jgqfront jgqfront NodePort 10.233.2.13 <none> 80:31151/TCP 14m
4、测试访问:

大功告成!



