image.png

把服务做到镜像里

下载基础镜像

  1. docker pull hub.hexiaodai.com/kubernetes/tomcat:8.0.51-alpine

打包项目(MVN 构建项目)

[root@m1 mooc-k8s-demo-docker]# ll
drwxr-xr-x. 4 root root   86 12月 13 13:07 web-demo
[root@m1 mooc-k8s-demo-docker]# cd web-demo
# mvn package
[root@m1 dubbo-demo]# mvn package

本地启动项目

[root@m1 target]# ll
-rw-r--r--. 1 root root 12068084 12月 13 22:23 web-demo-1.0-SNAPSHOT.war

# 查看 war 包内容
[root@m1 target]# jar -tf web-demo-1.0-SNAPSHOT.war

# 解压 war 包
[root@m1 target]# mkdir ROOT
[root@m1 target]# cp web-demo-1.0-SNAPSHOT.war ROOT
[root@m1 ROOT]# jar -xvf web-demo-1.0-SNAPSHOT.war
[root@m1 ROOT]# ls
META-INF  WEB-INF

构建镜像 - Dockerfile

确定 web 项目部署位置和启动脚本

[root@m1 ~]# docker run -it -d hub.hexiaodai.com/kubernetes/tomcat:8.0.51-alpine
a0667cc253c96f04c17abab254df3392b0d67f8d874c424571493f9ce8b98cef
[root@m1 ~]# docker exec -it a0667cc253c sh

# Tomcat 容器
/usr/local/tomcat/webapps/ROOT # pwd
/usr/local/tomcat/webapps/ROOT

# 自定义启动脚本
[root@m1 dockerfiles]# pwd
/root/mooc-k8s-demo-docker/web-demo/dockerfiles
[root@m1 dockerfiles]# ls
start.sh

start.sh

#!/bin/bash

sh /usr/local/tomcat/bin/startup.sh

tail -f /usr/local/tomcat/logs/catalina.out
FROM hub.hexiaodai.com/kubernetes/tomcat:8.0.51-alpine

COPY target/ROOT /usr/local/tomcat/webapps/ROOT

COPY dockerfiles/start.sh /usr/local/tomcat/bin/start.sh

ENTRYPOINT ["sh" , "/usr/local/tomcat/bin/start.sh"]

build

docker build -t web:v1 .

测试镜像

docker run -it web:v1

发布镜像

docker tag web:v1 hub.hexiaodai.com/kubernetes/web:v1

docker push hub.hexiaodai.com/kubernetes/web:v1

制作 k8s 服务,并调度

确定服务发现策略

ingress-nginx

编写 k8s 配置文件

#deploy
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-demo
spec:
  selector:
    matchLabels:
      app: web-demo
  replicas: 1
  template:
    metadata:
      labels:
        app: web-demo
    spec:
      containers:
      - name: web-demo
        image: hub.hexiaodai.com/kubernetes/web:v1
        ports:
        - containerPort: 8080
---
#service
apiVersion: v1
kind: Service
metadata:
  name: web-demo
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: web-demo
  type: ClusterIP

---
#ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: web-demo
spec:
  rules:
  - host: web.hexiaodai.com
    http:
      paths:
      - path: /
        backend:
          serviceName: web-demo
          servicePort: 80
kubectl apply -f web-demo.yaml

查看 web-demo 运行情况

[root@m1 nginx]# k get pod -o wide
NAME                        READY   STATUS    RESTARTS   AGE   IP            NODE   NOMINATED NODE   READINESS GATES
web-demo-5595bb8456-47fdt   2/2     Running   0          33s   10.244.0.25   m1     <none>           <none>